Skip to content

Commit ba1fd1a

Browse files
committed
Switch tests to use infer..extends
1 parent 15b91e6 commit ba1fd1a

File tree

5 files changed

+659
-770
lines changed

5 files changed

+659
-770
lines changed

tests/baselines/reference/templateLiteralTypes4.errors.txt

+62-70
Original file line numberDiff line numberDiff line change
@@ -1,82 +1,74 @@
1-
tests/cases/conformance/types/literal/templateLiteralTypes4.ts(128,12): error TS2345: Argument of type '2' is not assignable to parameter of type '0 | 1'.
2-
tests/cases/conformance/types/literal/templateLiteralTypes4.ts(132,12): error TS2345: Argument of type '2' is not assignable to parameter of type '0 | 1'.
1+
tests/cases/conformance/types/literal/templateLiteralTypes4.ts(120,12): error TS2345: Argument of type '2' is not assignable to parameter of type '0 | 1'.
2+
tests/cases/conformance/types/literal/templateLiteralTypes4.ts(124,12): error TS2345: Argument of type '2' is not assignable to parameter of type '0 | 1'.
33

44

55
==== tests/cases/conformance/types/literal/templateLiteralTypes4.ts (2 errors) ====
6-
type Is<T extends U, U> = T;
7-
8-
type T0 = "100" extends `${Is<infer N, number>}` ? N : never; // 100
9-
type T1 = "-100" extends `${Is<infer N, number>}` ? N : never; // -100
10-
type T2 = "1.1" extends `${Is<infer N, number>}` ? N : never; // 1.1
11-
type T3 = "8e-11" extends `${Is<infer N, number>}` ? N : never; // 8e-11 (0.00000000008)
12-
type T4 = "0x10" extends `${Is<infer N, number>}` ? N : never; // number (not round-trippable)
13-
type T5 = "0o10" extends `${Is<infer N, number>}` ? N : never; // number (not round-trippable)
14-
type T6 = "0b10" extends `${Is<infer N, number>}` ? N : never; // number (not round-trippable)
15-
type T7 = "10e2" extends `${Is<infer N, number>}` ? N : never; // number (not round-trippable)
16-
type T8 = "abcd" extends `${Is<infer N, number>}` ? N : never; // never
17-
18-
type T10 = "100" extends `${Is<infer N, bigint>}` ? N : never; // 100n
19-
type T11 = "-100" extends `${Is<infer N, bigint>}` ? N : never; // -100n
20-
type T12 = "0x10" extends `${Is<infer N, bigint>}` ? N : never; // bigint (not round-trippable)
21-
type T13 = "0o10" extends `${Is<infer N, bigint>}` ? N : never; // bigint (not round-trippable)
22-
type T14 = "0b10" extends `${Is<infer N, bigint>}` ? N : never; // bigint (not round-trippable)
23-
type T15 = "1.1" extends `${Is<infer N, bigint>}` ? N : never; // never
24-
type T16 = "10e2" extends `${Is<infer N, bigint>}` ? N : never; // never
25-
type T17 = "abcd" extends `${Is<infer N, bigint>}` ? N : never; // never
26-
27-
type T20 = "true" extends `${Is<infer T, boolean>}` ? T : never; // true
28-
type T21 = "false" extends `${Is<infer T, boolean>}` ? T : never; // false
29-
type T22 = "abcd" extends `${Is<infer T, boolean>}` ? T : never; // never
30-
31-
type T30 = "null" extends `${Is<infer T, null>}` ? T : never; // null
32-
type T31 = "abcd" extends `${Is<infer T, null>}` ? T : never; // never
33-
34-
type T40 = "undefined" extends `${Is<infer T, undefined>}` ? T : never; // undefined
35-
type T41 = "abcd" extends `${Is<infer T, undefined>}` ? T : never; // never
36-
37-
type T500 = "100" extends `${Is<infer T, string | number | bigint>}` ? T : never; // "100"
38-
type T501 = "100" extends `${Is<infer T, number | bigint>}` ? T : never; // 100
39-
type T502 = "100" extends `${Is<infer T, bigint>}` ? T : never; // 100n
40-
type T503 = "100" extends `${Is<infer T, "100" | number>}` ? T : never; // "100"
41-
type T504 = "100" extends `${Is<infer T, "101" | number>}` ? T : never; // 100
42-
43-
type T510 = "1.1" extends `${Is<infer T, string | number | bigint>}` ? T : never; // "1.1"
44-
type T511 = "1.1" extends `${Is<infer T, number | bigint>}` ? T : never; // 1.1
45-
type T512 = "1.1" extends `${Is<infer T, bigint>}` ? T : never; // never
46-
47-
type T520 = "true" extends `${Is<infer T, string | boolean>}` ? T : never; // "true"
48-
type T521 = "true" extends `${Is<infer T, boolean>}` ? T : never; // true
49-
50-
type T530 = "false" extends `${Is<infer T, string | boolean>}` ? T : never; // "false"
51-
type T531 = "false" extends `${Is<infer T, boolean>}` ? T : never; // false
52-
53-
type T540 = "null" extends `${Is<infer T, string | null>}` ? T : never; // "null"
54-
type T541 = "null" extends `${Is<infer T, string | null>}` ? T : never; // null
55-
56-
type T550 = "undefined" extends `${Is<infer T, string | undefined>}` ? T : never; // "undefined"
57-
type T551 = "undefined" extends `${Is<infer T, undefined>}` ? T : never; // undefined
58-
59-
type T560 = "100000000000000000000000" extends `${Is<infer T, number | bigint>}` ? T : never; // 100000000000000000000000n
60-
type T561 = "100000000000000000000000" extends `${Is<infer T, number>}` ? T : never; // number
6+
type T0 = "100" extends `${infer N extends number}` ? N : never; // 100
7+
type T1 = "-100" extends `${infer N extends number}` ? N : never; // -100
8+
type T2 = "1.1" extends `${infer N extends number}` ? N : never; // 1.1
9+
type T3 = "8e-11" extends `${infer N extends number}` ? N : never; // 8e-11 (0.00000000008)
10+
type T4 = "0x10" extends `${infer N extends number}` ? N : never; // number (not round-trippable)
11+
type T5 = "0o10" extends `${infer N extends number}` ? N : never; // number (not round-trippable)
12+
type T6 = "0b10" extends `${infer N extends number}` ? N : never; // number (not round-trippable)
13+
type T7 = "10e2" extends `${infer N extends number}` ? N : never; // number (not round-trippable)
14+
type T8 = "abcd" extends `${infer N extends number}` ? N : never; // never
15+
16+
type T10 = "100" extends `${infer N extends bigint}` ? N : never; // 100n
17+
type T11 = "-100" extends `${infer N extends bigint}` ? N : never; // -100n
18+
type T12 = "0x10" extends `${infer N extends bigint}` ? N : never; // bigint (not round-trippable)
19+
type T13 = "0o10" extends `${infer N extends bigint}` ? N : never; // bigint (not round-trippable)
20+
type T14 = "0b10" extends `${infer N extends bigint}` ? N : never; // bigint (not round-trippable)
21+
type T15 = "1.1" extends `${infer N extends bigint}` ? N : never; // never
22+
type T16 = "10e2" extends `${infer N extends bigint}` ? N : never; // never
23+
type T17 = "abcd" extends `${infer N extends bigint}` ? N : never; // never
24+
25+
type T20 = "true" extends `${infer T extends boolean}` ? T : never; // true
26+
type T21 = "false" extends `${infer T extends boolean}` ? T : never; // false
27+
type T22 = "abcd" extends `${infer T extends boolean}` ? T : never; // never
28+
29+
type T30 = "null" extends `${infer T extends null}` ? T : never; // null
30+
type T31 = "abcd" extends `${infer T extends null}` ? T : never; // never
31+
32+
type T40 = "undefined" extends `${infer T extends undefined}` ? T : never; // undefined
33+
type T41 = "abcd" extends `${infer T extends undefined}` ? T : never; // never
34+
35+
type T500 = "100" extends `${infer T extends string | number | bigint}` ? T : never; // "100"
36+
type T501 = "100" extends `${infer T extends number | bigint}` ? T : never; // 100
37+
type T502 = "100" extends `${infer T extends bigint}` ? T : never; // 100n
38+
type T503 = "100" extends `${infer T extends "100" | number}` ? T : never; // "100"
39+
type T504 = "100" extends `${infer T extends "101" | number}` ? T : never; // 100
40+
41+
type T510 = "1.1" extends `${infer T extends string | number | bigint}` ? T : never; // "1.1"
42+
type T511 = "1.1" extends `${infer T extends number | bigint}` ? T : never; // 1.1
43+
type T512 = "1.1" extends `${infer T extends bigint}` ? T : never; // never
44+
45+
type T520 = "true" extends `${infer T extends string | boolean}` ? T : never; // "true"
46+
type T521 = "true" extends `${infer T extends boolean}` ? T : never; // true
47+
48+
type T530 = "false" extends `${infer T extends string | boolean}` ? T : never; // "false"
49+
type T531 = "false" extends `${infer T extends boolean}` ? T : never; // false
50+
51+
type T540 = "null" extends `${infer T extends string | null}` ? T : never; // "null"
52+
type T541 = "null" extends `${infer T extends string | null}` ? T : never; // null
53+
54+
type T550 = "undefined" extends `${infer T extends string | undefined}` ? T : never; // "undefined"
55+
type T551 = "undefined" extends `${infer T extends undefined}` ? T : never; // undefined
56+
57+
type T560 = "100000000000000000000000" extends `${infer T extends number | bigint}` ? T : never; // 100000000000000000000000n
58+
type T561 = "100000000000000000000000" extends `${infer T extends number}` ? T : never; // number
6159

6260
type ExtractPrimitives<T extends string> =
6361
| T
64-
| (T extends `${Is<infer U, number>}` ? U : never)
65-
| (T extends `${Is<infer U, bigint>}` ? U : never)
66-
| (T extends `${Is<infer U, boolean | null | undefined>}` ? U : never)
62+
| (T extends `${infer U extends number}` ? U : never)
63+
| (T extends `${infer U extends bigint}` ? U : never)
64+
| (T extends `${infer U extends boolean | null | undefined}` ? U : never)
6765
;
6866

69-
// Type writer doesn't show the union that is produced, so we use a helper type to verify constraints
70-
type T570 = ExtractPrimitives<"100">;
71-
type CheckT570 = Is<"100" | 100 | 100n, T570>;
67+
type T570 = ExtractPrimitives<"100">; // "100" | 100 | 100n
68+
type T571 = ExtractPrimitives<"1.1">; // "1.1" | 1.1
69+
type T572 = ExtractPrimitives<"true">; // "true" | true
7270

73-
type T571 = ExtractPrimitives<"1.1">;
74-
type CheckT571 = Is<"1.1" | 1.1, T571>;
75-
76-
type T572 = ExtractPrimitives<"true">;
77-
type CheckT572 = Is<"true" | true, T572>;
78-
79-
type NumberFor<S extends string> = S extends `${Is<infer N, number>}` ? N : never;
71+
type NumberFor<S extends string> = S extends `${infer N extends number}` ? N : never;
8072
type T60 = NumberFor<"100">; // 100
8173
type T61 = NumberFor<any>; // never
8274
type T62 = NumberFor<never>; // never

0 commit comments

Comments
 (0)