Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
78fc86a121 | ||
|
|
744d1eb6ef |
@@ -1,6 +1,10 @@
|
||||
type Provider<T> = (manager: DependencyManager) => Promise<T> | T;
|
||||
|
||||
type ClassType<T> = new () => T;
|
||||
// deno-lint-ignore no-explicit-any
|
||||
type HasConstructor<T> = T extends new (...args: any[]) => unknown ? T : never;
|
||||
// deno-lint-ignore no-explicit-any
|
||||
type ConstructorInstance<T> = T extends new (...args: any[]) => infer I ? I
|
||||
: never;
|
||||
|
||||
// deno-lint-ignore no-explicit-any
|
||||
type ModuleIdentifier = any;
|
||||
@@ -41,7 +45,9 @@ export class DependencyManager {
|
||||
*
|
||||
* @param identifier the identifier used to register the provider
|
||||
*/
|
||||
async resolve<T>(identifier: ClassType<T>): Promise<T>;
|
||||
async resolve<T>(
|
||||
identifier: HasConstructor<T>,
|
||||
): Promise<ConstructorInstance<T>>;
|
||||
async resolve<T>(identifier: ModuleIdentifier): Promise<T>;
|
||||
async resolve(identifier: ModuleIdentifier) {
|
||||
const module = this.modules.get(identifier);
|
||||
|
||||
14
readme.md
14
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<string>('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<number>('dependency-identifier'); //< `c` is of type `number`
|
||||
```
|
||||
|
||||
## Errors
|
||||
|
||||
Reference in New Issue
Block a user