@@ -382,10 +382,30 @@ declare namespace R {
382
382
/**
383
383
* Makes a shallow clone of an object, setting or overriding the specified property with the given value.
384
384
*/
385
- assoc < T , U > ( prop : Prop , val : T , obj : U ) : { prop : T } & U ;
386
- assoc < T > ( prop : Prop , val : T ) : < U > ( obj : U ) => { prop : T } & U ;
387
- assoc < T , U > ( prop : Prop ) : CurriedFn2 < T , U , { prop : T } & U > ;
388
- // assoc<T,U>: CurriedFn3<Prop, T, U, {prop: T} & U>;
385
+
386
+ // extend object with new property
387
+ assoc < T , U extends Struct < any > , K extends keyof U > ( prop : K , val : T , obj : U ) : { [ P in K ] : T } & U ;
388
+ assoc < T , U extends Struct < any > , K extends keyof U > ( prop : K , val : T ) : ( obj : U ) => { [ P in K ] : T } & U ; // generics too early?
389
+ assoc < T , U extends Struct < any > , K extends keyof U > ( prop : K ) : CurriedFn2 < T , U , { [ P in K ] : T } & U > ; // generics too early?
390
+ // assoc<T, U extends Struct<any>, K extends keyof U>: CurriedFn3<K, T, U, {[P in K]: T} & U>;
391
+
392
+ // // homogeneous object
393
+ // assoc<T, U extends Struct<T>>(prop: Prop, val: T, obj: U): U;
394
+ // assoc<T>(prop: Prop, val: T): <U extends Struct<T>>(obj: U) => U;
395
+ // assoc<T, U extends Struct<T>>(prop: Prop): CurriedFn2<T, U, U>; // generics too early?
396
+ // // assoc<T, U extends Struct<T>>: CurriedFn3<Prop, T, U, U>;
397
+
398
+ // any object as long as the type remains unchanged
399
+ assoc < T > ( prop : Prop , val : any , obj : T ) : T ;
400
+ assoc ( prop : Prop , val : any ) : < T > ( obj : T ) => T ;
401
+ assoc < T > ( prop : Prop ) : CurriedFn2 < any , T , T > ; // generics too early?
402
+ // assoc<T>: CurriedFn3<Prop, any, T, T>;
403
+
404
+ // // broken alternative trying to be dynamic, seems not yet possible in current TS versions
405
+ // assoc<T,U>(prop: Prop, val: T, obj: U): {prop: T} & U;
406
+ // assoc<T>(prop: Prop, val: T): <U>(obj: U) => {prop: T} & U;
407
+ // assoc<T,U>(prop: Prop): CurriedFn2<T,U, {prop: T} & U>;
408
+ // // assoc<T,U>: CurriedFn3<Prop, T, U, {prop: T} & U>;
389
409
390
410
391
411
/**
0 commit comments