import type { Constructor, Dependencies, GetInterface, MapDependencies } from "./types.js"; type DropLast = T extends [...infer P, any] ? [...P] : never; type Implementation, I extends Constructor> = I & { __abstraction: A; }; export declare class Abstraction { /** * If the generic type is not used in any way, TS simply ignores it, thus breaking the desired type checking. * We must set this to `protected` to prevent TSC from stripping the type away. * @internal */ protected readonly __type: T; readonly token: symbol; constructor(name: string); toString(): string; createImplementation>>(params: { implementation: I; dependencies: Dependencies; }): Implementation; createDecorator(params: { decorator: I; dependencies: MapDependencies>>; }): Implementation; createComposite>>(params: { implementation: I; dependencies: Dependencies; }): Implementation; } export {};