1
1
//// [conditionalTypes1.ts]
2
- type Diff < T , U > = T extends U ? never : T ;
3
- type Filter < T , U > = T extends U ? T : never ;
4
- type NonNullable < T > = Diff < T , null | undefined > ;
2
+ type T00 = Exclude < "a" | "b" | "c" | "d" , "a" | "c" | "f" > ; // "b" | "d"
3
+ type T01 = Extract < "a" | "b" | "c" | "d" , "a" | "c" | "f" > ; // "a" | "c"
5
4
6
- type T00 = Diff < "a" | "b" | "c" | "d" , "a" | "c" | "f" > ; // "b" | "d"
7
- type T01 = Filter < "a" | "b" | "c" | "d" , "a" | "c" | "f" > ; // "a" | "c"
8
-
9
- type T02 = Diff < string | number | ( ( ) => void ) , Function > ; // string | number
10
- type T03 = Filter < string | number | ( ( ) => void ) , Function > ; // () => void
5
+ type T02 = Exclude < string | number | ( ( ) => void ) , Function > ; // string | number
6
+ type T03 = Extract < string | number | ( ( ) => void ) , Function > ; // () => void
11
7
12
8
type T04 = NonNullable < string | number | undefined > ; // string | number
13
9
type T05 = NonNullable < ( ( ) => string ) | string [ ] | null | undefined > ; // (() => string) | string[]
@@ -31,23 +27,23 @@ function f3<T>(x: Partial<T>[keyof T], y: NonNullable<Partial<T>[keyof T]>) {
31
27
32
28
type Options = { k : "a" , a : number } | { k : "b" , b : string } | { k : "c" , c : boolean } ;
33
29
34
- type T10 = Diff < Options , { k : "a" | "b" } > ; // { k: "c", c: boolean }
35
- type T11 = Filter < Options , { k : "a" | "b" } > ; // { k: "a", a: number } | { k: "b", b: string }
30
+ type T10 = Exclude < Options , { k : "a" | "b" } > ; // { k: "c", c: boolean }
31
+ type T11 = Extract < Options , { k : "a" | "b" } > ; // { k: "a", a: number } | { k: "b", b: string }
36
32
37
- type T12 = Diff < Options , { k : "a" } | { k : "b" } > ; // { k: "c", c: boolean }
38
- type T13 = Filter < Options , { k : "a" } | { k : "b" } > ; // { k: "a", a: number } | { k: "b", b: string }
33
+ type T12 = Exclude < Options , { k : "a" } | { k : "b" } > ; // { k: "c", c: boolean }
34
+ type T13 = Extract < Options , { k : "a" } | { k : "b" } > ; // { k: "a", a: number } | { k: "b", b: string }
39
35
40
- type T14 = Diff < Options , { q : "a" } > ; // Options
41
- type T15 = Filter < Options , { q : "a" } > ; // never
36
+ type T14 = Exclude < Options , { q : "a" } > ; // Options
37
+ type T15 = Extract < Options , { q : "a" } > ; // never
42
38
43
- declare function f4 < T extends Options , K extends string > ( p : K ) : Filter < T , { k : K } > ;
39
+ declare function f4 < T extends Options , K extends string > ( p : K ) : Extract < T , { k : K } > ;
44
40
let x0 = f4 ( "a" ) ; // { k: "a", a: number }
45
41
46
- type OptionsOfKind < K extends Options [ "k" ] > = Filter < Options , { k : K } > ;
42
+ type OptionsOfKind < K extends Options [ "k" ] > = Extract < Options , { k : K } > ;
47
43
48
44
type T16 = OptionsOfKind < "a" | "b" > ; // { k: "a", a: number } | { k: "b", b: string }
49
45
50
- type Select < T , K extends keyof T , V extends T [ K ] > = Filter < T , { [ P in K ] : V } > ;
46
+ type Select < T , K extends keyof T , V extends T [ K ] > = Extract < T , { [ P in K ] : V } > ;
51
47
52
48
type T17 = Select < Options , "k" , "a" | "b" > ; // // { k: "a", a: number } | { k: "b", b: string }
53
49
@@ -332,13 +328,10 @@ function f33() {
332
328
333
329
334
330
//// [conditionalTypes1.d.ts]
335
- declare type Diff< T , U > = T extends U ? never : T;
336
- declare type Filter< T , U > = T extends U ? T : never;
337
- declare type NonNullable< T > = Diff< T , null | undefined > ;
338
- declare type T00 = Diff< "a " | "b " | "c " | "d ", "a " | "c " | "f "> ;
339
- declare type T01 = Filter< "a " | "b " | "c " | "d ", "a " | "c " | "f "> ;
340
- declare type T02 = Diff< string | number | ( ( ) => void ) , Function > ;
341
- declare type T03 = Filter< string | number | ( ( ) => void ) , Function > ;
331
+ declare type T00 = Exclude< "a " | "b " | "c " | "d ", "a " | "c " | "f "> ;
332
+ declare type T01 = Extract< "a " | "b " | "c " | "d ", "a " | "c " | "f "> ;
333
+ declare type T02 = Exclude< string | number | ( ( ) => void ) , Function > ;
334
+ declare type T03 = Extract< string | number | ( ( ) => void ) , Function > ;
342
335
declare type T04 = NonNullable< string | number | undefined > ;
343
336
declare type T05 = NonNullable< ( ( ) => string ) | string [ ] | null | undefined > ;
344
337
declare function f1< T > (x: T, y: NonNullable< T > ): void;
@@ -354,40 +347,40 @@ declare type Options = {
354
347
k : "c" ;
355
348
c : boolean ;
356
349
} ;
357
- declare type T10 = Diff < Options , {
350
+ declare type T10 = Exclude < Options , {
358
351
k : "a" | "b" ;
359
352
} > ;
360
- declare type T11 = Filter < Options , {
353
+ declare type T11 = Extract < Options , {
361
354
k : "a" | "b" ;
362
355
} > ;
363
- declare type T12 = Diff < Options , {
356
+ declare type T12 = Exclude < Options , {
364
357
k : "a" ;
365
358
} | {
366
359
k : "b" ;
367
360
} > ;
368
- declare type T13 = Filter < Options , {
361
+ declare type T13 = Extract < Options , {
369
362
k : "a" ;
370
363
} | {
371
364
k : "b" ;
372
365
} > ;
373
- declare type T14 = Diff < Options , {
366
+ declare type T14 = Exclude < Options , {
374
367
q : "a" ;
375
368
} > ;
376
- declare type T15 = Filter < Options , {
369
+ declare type T15 = Extract < Options , {
377
370
q : "a" ;
378
371
} > ;
379
- declare function f4< T extends Options , K extends string > (p: K): Filter < T , {
372
+ declare function f4< T extends Options , K extends string > (p: K): Extract < T , {
380
373
k : K ;
381
374
} > ;
382
375
declare let x0: {
383
376
k : "a" ;
384
377
a : number ;
385
378
} ;
386
- declare type OptionsOfKind< K extends Options [ "k "] > = Filter < Options , {
379
+ declare type OptionsOfKind< K extends Options [ "k "] > = Extract < Options , {
387
380
k : K ;
388
381
} > ;
389
382
declare type T16 = OptionsOfKind< "a " | "b "> ;
390
- declare type Select< T , K extends keyof T , V extends T [ K ] > = Filter < T , {
383
+ declare type Select< T , K extends keyof T , V extends T [ K ] > = Extract < T , {
391
384
[ P in K ] : V ;
392
385
} > ;
393
386
declare type T17 = Select< Options , "k ", "a " | "b "> ;
0 commit comments