@@ -141,7 +141,14 @@ export interface WritableContainer<
141141 * @param name The "name" of the dependency (can be a symbol).
142142 * @param dependency An already instantiated value.
143143 */
144- registerValue < TName extends ContainerKey , TDependency > (
144+ registerValue <
145+ TName extends ContainerKey ,
146+ TDependency extends TName extends keyof TSyncDependencies
147+ ? TSyncDependencies [ TName ]
148+ : TName extends keyof TAsyncDependencies
149+ ? never
150+ : unknown ,
151+ > (
145152 name : TName ,
146153 dependency : TDependency ,
147154 ) : Container <
@@ -280,13 +287,21 @@ function __createContainer<
280287 Container < TSyncDependencies , { } >
281288 > ,
282289 ) : ContainerWithNewSyncDep < TName , TDependency > {
283- return __createContainer (
284- {
285- ...syncDependencies ,
286- [ name ] : dependency ,
287- } ,
288- asyncDependencies ,
289- ) as ContainerWithNewSyncDep < TName , TDependency >
290+ if ( name in syncDependencies ) {
291+ return __createContainer (
292+ {
293+ ...syncDependencies ,
294+ [ name ] : dependency ,
295+ } ,
296+ asyncDependencies ,
297+ ) as ContainerWithNewSyncDep < TName , TDependency >
298+ } else {
299+ ; ( syncDependencies as Record < TName , unknown > ) [ name ] = dependency
300+ return __createContainer (
301+ syncDependencies ,
302+ asyncDependencies ,
303+ ) as ContainerWithNewSyncDep < TName , TDependency >
304+ }
290305 } ,
291306
292307 registerAsync < TName extends ContainerKey , TDependency > (
@@ -296,23 +311,39 @@ function __createContainer<
296311 Container < TSyncDependencies , TAsyncDependencies >
297312 > ,
298313 ) : ContainerWithNewAsyncDep < TName , TDependency > {
299- return __createContainer ( syncDependencies , {
300- ...asyncDependencies ,
301- [ name ] : dependency ,
302- } ) as ContainerWithNewAsyncDep < TName , TDependency >
314+ if ( name in asyncDependencies ) {
315+ return __createContainer ( syncDependencies , {
316+ ...asyncDependencies ,
317+ [ name ] : dependency ,
318+ } ) as ContainerWithNewAsyncDep < TName , TDependency >
319+ } else {
320+ ; ( asyncDependencies as Record < TName , unknown > ) [ name ] = dependency
321+ return __createContainer (
322+ syncDependencies ,
323+ asyncDependencies ,
324+ ) as ContainerWithNewAsyncDep < TName , TDependency >
325+ }
303326 } ,
304327
305328 registerValue < TName extends ContainerKey , TDependency > (
306329 name : TName ,
307330 dependency : TDependency ,
308331 ) : ContainerWithNewSyncDep < TName , TDependency > {
309- return __createContainer (
310- {
311- ...syncDependencies ,
312- [ name ] : ( ) => dependency ,
313- } ,
314- asyncDependencies ,
315- ) as ContainerWithNewSyncDep < TName , TDependency >
332+ if ( name in syncDependencies ) {
333+ return __createContainer (
334+ {
335+ ...syncDependencies ,
336+ [ name ] : ( ) => dependency ,
337+ } ,
338+ asyncDependencies ,
339+ ) as ContainerWithNewSyncDep < TName , TDependency >
340+ } else {
341+ ; ( syncDependencies as Record < TName , unknown > ) [ name ] = ( ) => dependency
342+ return __createContainer (
343+ syncDependencies ,
344+ asyncDependencies ,
345+ ) as ContainerWithNewSyncDep < TName , TDependency >
346+ }
316347 } ,
317348
318349 resolve < TName extends keyof TSyncDependencies > (
0 commit comments