import { Token, LazyToken } from './token'; import { Container } from './container'; import { Binding } from './binding'; export type Newable = new () => TInstance; export type InjectFunction any> = (token: GenericToken) => ReturnType; export type CommonToken = Token | Newable; export type TokenType = T extends CommonToken ? U : never; export type GenericToken = Token | Newable | LazyToken; export type LazyTokenCallback = () => CommonToken; export interface Context { container: Container; } export type DynamicValue = (ctx: Context) => T; export type RecordObject = Record; export interface GetOptions { optional?: boolean; self?: boolean; skipSelf?: boolean; } export interface Options extends GetOptions { inject?: GenericToken; token?: CommonToken; binding?: Binding; parent?: Options; } export type ActivationHandler = (ctx: Context, input: T, token: CommonToken) => T; export type BindingActivationHandler = (ctx: Context, input: T) => T; export type DeactivationHandler = (input: T, token: CommonToken) => void; export type BindingDeactivationHandler = (input: T) => void; export type PostConstructParam = void | true | CommonToken[] | ((item: Binding, index: number, arr: Binding[]) => boolean);