File tree Expand file tree Collapse file tree 2 files changed +16
-7
lines changed Expand file tree Collapse file tree 2 files changed +16
-7
lines changed Original file line number Diff line number Diff line change @@ -33,13 +33,21 @@ export type ReferencedValue<T> = NestedValue<T>;
3333type NestedValue < T , U = never > = T | (
3434 T extends object
3535 ? T extends U
36- ? never
36+ ? NestedValue < Diff < T , U > , U >
3737 : T extends Array < infer I >
3838 ? NestedValue < I , U | T >
39- : T [ keyof T ] | NestedValue < T [ keyof T ] , U | T >
39+ : NestedValue < T [ keyof T ] , U | T >
4040 : never
4141 ) ;
4242
43+ type Diff < T extends object , M > = M extends infer U
44+ ? T extends U
45+ ? Exclude < keyof T , keyof U > extends never
46+ ? never
47+ : Pick < T , Exclude < keyof T , keyof U > >
48+ : never
49+ : never ;
50+
4351/**
4452 * An error indicating a problem related to JSON pointer operations.
4553 */
Original file line number Diff line number Diff line change 88 JsonPointerLike ,
99 Entry ,
1010 InvalidReferenceError ,
11- RootStructure ,
1211 ReferencedValue ,
1312 RootValue ,
1413} from './pointer' ;
@@ -349,7 +348,7 @@ export class JsonRelativePointer implements JsonConvertible {
349348 *
350349 * @throws {InvalidReferenceError } If the pointer references the root of the structure.
351350 */
352- public unset < T extends RootStructure > ( root : T , pointer = JsonPointer . root ( ) ) : ReferencedValue < T > | undefined {
351+ public unset < T extends RootValue > ( root : T , pointer = JsonPointer . root ( ) ) : ReferencedValue < T > | undefined {
353352 if ( this . isKeyPointer ( ) ) {
354353 throw new JsonPointerError ( 'Cannot write to a key.' ) ;
355354 }
@@ -358,17 +357,19 @@ export class JsonRelativePointer implements JsonConvertible {
358357 const remainderPointer = this . getRemainderPointer ( ) ;
359358
360359 if ( ! remainderPointer . isRoot ( ) ) {
361- return remainderPointer . unset ( stack [ stack . length - 1 ] [ 1 ] ) ;
360+ // Given V = typeof value, and typeof value ⊆ ReferencedValue<T> → ReferencedValue<K> ⊆ ReferencedValue<T>
361+ return remainderPointer . unset ( stack [ stack . length - 1 ] [ 1 ] ) as ReferencedValue < T > ;
362362 }
363363
364364 if ( stack . length < 2 ) {
365365 throw new JsonPointerError ( 'Cannot unset the root value.' ) ;
366366 }
367367
368368 const segment = stack [ stack . length - 1 ] [ 0 ] ! ;
369- const structure = stack [ stack . length - 2 ] [ 1 ] ;
369+ const parent = stack [ stack . length - 2 ] [ 1 ] ;
370370
371- return JsonPointer . from ( [ segment ] ) . unset ( structure ) ;
371+ // Given V = typeof value, and typeof value ⊆ ReferencedValue<T> → ReferencedValue<K> ⊆ ReferencedValue<T>
372+ return JsonPointer . from ( [ segment ] ) . unset ( parent ) as ReferencedValue < T > ;
372373 }
373374
374375 /**
You can’t perform that action at this time.
0 commit comments