11import { Placeholder , AssocResults } from './util/tools' ;
22
33// assoc(prop)
4- export function assoc < K extends PropertyKey > ( prop : K ) : {
4+ export function assoc < K extends PropertyKey > ( prop : K extends Placeholder ? never : K ) : {
55 // assoc(prop)(val)
66 < T > ( val : T ) : {
77 // assoc(prop)(val)(obj), when obj has key prop, tests if val is typeof obj[prop] for best return type
@@ -38,7 +38,7 @@ export function assoc<T>(__: Placeholder, val: T) : {
3838
3939// assoc(prop, val)
4040export function assoc < K extends PropertyKey , T > ( prop : K extends Placeholder ? never : K , val : T ) : {
41- // assoc(prop, val)(obj), when obj has key prop, tests if val is typeof obj[prop] for best return type
41+ // assoc(prop, val)(obj)
4242 < U > ( obj : U ) : AssocResults < K , T , U > ;
4343} ;
4444
@@ -54,15 +54,11 @@ export function assoc<U>(__: Placeholder, __2: Placeholder, obj: U): {
5454 < K extends PropertyKey , T > ( prop : K , val : T ) : AssocResults < K , T , U > ;
5555} ;
5656
57- // assoc(prop, __, obj)(val), when prop is not keyof obj
58- export function assoc < K extends PropertyKey , U > ( prop : K extends Placeholder ? never : K , __ : Placeholder , obj : U ) : < T > ( val : T ) => U & Record < K , T > ;
59- // assoc(prop, __, obj)(val), when K is keyof obj, tests if val is typeof obj[prop] for best return type
60- export function assoc < K extends keyof U , U > ( prop : K , __ : Placeholder , obj : U ) : < T > ( val : T ) => T extends U [ K ] ? U : Omit < U , K > & Record < K , T > ;
61- // assoc(__, val, obj)(prop), this tests if prop is keyof obj and if val is typeof obj[prop] for best return type
62- export function assoc < T , U > ( __ : Placeholder , val : T extends Placeholder ? never : T , obj : U ) : < K extends PropertyKey > ( prop : K ) => K extends keyof U ? T extends U [ K ] ? U : Omit < U , K > & Record < K , T > : U & Record < K , T > ;
63- // assoc(prop, val, obj) when prop is not keyof obj
64- export function assoc < K extends PropertyKey , T , U > ( prop : K extends Placeholder ? never : K , val : T extends Placeholder ? never : T , obj : U ) : U & Record < K , T > ;
65- // assoc(prop, val, obj) when prop is keyof obj and val is not same type
66- export function assoc < K extends keyof U , T , U > ( prop : K , val : T extends Placeholder ? never : T , obj : U ) : Omit < U , K > & Record < K , T > ;
67- // assoc(prop, val, obj) when prop is keyof obj and val is same type
68- export function assoc < K extends keyof U , U > ( prop : K , val : U [ K ] , obj : U ) : U ;
57+ // assoc(__, val, obj)(prop)
58+ export function assoc < T , U > ( __ : Placeholder , val : T , obj : U ) : < K extends PropertyKey > ( prop : K extends Placeholder ? never : K ) => AssocResults < K , T , U > ;
59+
60+ // assoc(prop, __, obj)(val)
61+ export function assoc < K extends PropertyKey , U > ( prop : K , __ : Placeholder , obj : U ) : < T > ( val : T ) => AssocResults < K , T , U > ;
62+
63+ // assoc(prop, val, obj)
64+ export function assoc < K extends PropertyKey , T , U > ( prop : K , val : T , obj : U ) : AssocResults < K , T , U > ;
0 commit comments