Skip to content
This repository was archived by the owner on Apr 21, 2024. It is now read-only.

Commit 8b458c7

Browse files
committed
fix: disallow re-registering with different types
1 parent b27fa22 commit 8b458c7

File tree

2 files changed

+32
-4
lines changed

2 files changed

+32
-4
lines changed

lambda-ioc/deno/container.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,14 @@ export interface WritableContainer<
7777
* @param name The "name" of the dependency (can be a symbol).
7878
* @param dependency A dependency factory.
7979
*/
80-
register<TName extends ContainerKey, TDependency>(
80+
register<
81+
TName extends ContainerKey,
82+
TDependency extends TName extends keyof TSyncDependencies
83+
? TSyncDependencies[TName]
84+
: TName extends keyof TAsyncDependencies
85+
? never
86+
: unknown,
87+
>(
8188
name: TName,
8289
dependency: SyncDependencyFactory<
8390
TDependency,
@@ -102,7 +109,14 @@ export interface WritableContainer<
102109
* @param name The "name" of the dependency (can be a symbol).
103110
* @param dependency A dependency factory.
104111
*/
105-
registerAsync<TName extends ContainerKey, TDependency>(
112+
registerAsync<
113+
TName extends ContainerKey,
114+
TDependency extends TName extends keyof TSyncDependencies
115+
? never
116+
: TName extends keyof TAsyncDependencies
117+
? TAsyncDependencies[TName]
118+
: unknown,
119+
>(
106120
name: TName,
107121
dependency: AsyncDependencyFactory<
108122
TDependency,

lambda-ioc/src/container.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,14 @@ export interface WritableContainer<
7777
* @param name The "name" of the dependency (can be a symbol).
7878
* @param dependency A dependency factory.
7979
*/
80-
register<TName extends ContainerKey, TDependency>(
80+
register<
81+
TName extends ContainerKey,
82+
TDependency extends TName extends keyof TSyncDependencies
83+
? TSyncDependencies[TName]
84+
: TName extends keyof TAsyncDependencies
85+
? never
86+
: unknown,
87+
>(
8188
name: TName,
8289
dependency: SyncDependencyFactory<
8390
TDependency,
@@ -102,7 +109,14 @@ export interface WritableContainer<
102109
* @param name The "name" of the dependency (can be a symbol).
103110
* @param dependency A dependency factory.
104111
*/
105-
registerAsync<TName extends ContainerKey, TDependency>(
112+
registerAsync<
113+
TName extends ContainerKey,
114+
TDependency extends TName extends keyof TSyncDependencies
115+
? never
116+
: TName extends keyof TAsyncDependencies
117+
? TAsyncDependencies[TName]
118+
: unknown,
119+
>(
106120
name: TName,
107121
dependency: AsyncDependencyFactory<
108122
TDependency,

0 commit comments

Comments
 (0)