import { DependencyWithName, InjectableWithName } from './injectable';
export declare const TOKEN_ACCESSOR_KEY = "@injectable-ts/core//TOKEN_ACCESSOR";
export interface TokenAccessor {
    <Name extends PropertyKey, Dependencies extends Record<Name, unknown>>(dependencies: Dependencies, name: Name): Dependencies[Name];
}
export interface TokenInjectable<Name, Type> {
    readonly name: Name;
    readonly type: Type;
    readonly optional: false;
    readonly children: readonly [
        DependencyWithName<typeof TOKEN_ACCESSOR_KEY, TokenAccessor, []>
    ];
}
export declare function token<Name extends PropertyKey>(name: Name): <Type = never>() => InjectableWithName<TokenInjectable<Name, Type>, Type>;
