From 744d1eb6efdf0649925d327ce129db3e63ee2208 Mon Sep 17 00:00:00 2001 From: Robin Chappatte Date: Fri, 31 May 2024 18:05:13 +0200 Subject: [PATCH] fixes typing --- dependency-manager.ts | 8 ++++++-- readme.md | 14 ++------------ 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/dependency-manager.ts b/dependency-manager.ts index 65b6e84..2c48a4b 100644 --- a/dependency-manager.ts +++ b/dependency-manager.ts @@ -1,6 +1,8 @@ type Provider = (manager: DependencyManager) => Promise | T; -type ClassType = new () => T; +type HasConstructor = T extends new (...args: any[]) => unknown ? T : never; +type ConstructorInstance = T extends new (...args: any[]) => infer I ? I + : never; // deno-lint-ignore no-explicit-any type ModuleIdentifier = any; @@ -41,7 +43,9 @@ export class DependencyManager { * * @param identifier the identifier used to register the provider */ - async resolve(identifier: ClassType): Promise; + async resolve( + identifier: HasConstructor, + ): Promise>; async resolve(identifier: ModuleIdentifier): Promise; async resolve(identifier: ModuleIdentifier) { const module = this.modules.get(identifier); diff --git a/readme.md b/readme.md index 02b4c1a..8cf9b14 100644 --- a/readme.md +++ b/readme.md @@ -53,19 +53,9 @@ Any valid `Map` key can be used as identifier, but using a class allow the retur ```typescript class MyDependency {} -manager.register(MyDependency, () => new MyDependency()); const a = await manager.resolve(MyDependecy); //< `a` is of type `MyDependency` -``` - -Otherwise you can provide the type as type argument: - -```typescript -function provider() { - return 'foo' -} -manager.register('my-dependency-identifier', provider); -const a = await manager.resolve('my-dependency-identifier'); //< `a` is of type `unknown` -const b = await manager.resolve('my-dependency-identifier'); //< `b` is of type `string` +const b = await manager.resolve('dependency-identifier'); //< `b` is of type `unknown` +const c = await manager.resolve('dependency-identifier'); //< `c` is of type `number` ``` ## Errors