/
intrinsicTypes.types
151 lines (109 loc) · 3.36 KB
/
intrinsicTypes.types
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
=== tests/cases/conformance/types/typeAliases/intrinsicTypes.ts ===
type TU1 = Uppercase<'hello'>; // "HELLO"
>TU1 : "HELLO"
type TU2 = Uppercase<'foo' | 'bar'>; // "FOO" | "BAR"
>TU2 : "FOO" | "BAR"
type TU3 = Uppercase<string>; // Uppercase<string>
>TU3 : Uppercase<string>
type TU4 = Uppercase<any>; // Uppercase<`${any}`>
>TU4 : Uppercase<any>
type TU5 = Uppercase<never>; // never
>TU5 : never
type TU6 = Uppercase<42>; // Error
>TU6 : 42
type TL1 = Lowercase<'HELLO'>; // "hello"
>TL1 : "hello"
type TL2 = Lowercase<'FOO' | 'BAR'>; // "foo" | "bar"
>TL2 : "foo" | "bar"
type TL3 = Lowercase<string>; // Lowercase<string>
>TL3 : Lowercase<string>
type TL4 = Lowercase<any>; // Lowercase<`${any}`>
>TL4 : Lowercase<any>
type TL5 = Lowercase<never>; // never
>TL5 : never
type TL6 = Lowercase<42>; // Error
>TL6 : 42
type TC1 = Capitalize<'hello'>; // "Hello"
>TC1 : "Hello"
type TC2 = Capitalize<'foo' | 'bar'>; // "Foo" | "Bar"
>TC2 : "Foo" | "Bar"
type TC3 = Capitalize<string>; // Capitalize<string>
>TC3 : Capitalize<string>
type TC4 = Capitalize<any>; // Capitalize<`${any}`>
>TC4 : Capitalize<any>
type TC5 = Capitalize<never>; // never
>TC5 : never
type TC6 = Capitalize<42>; // Error
>TC6 : 42
type TN1 = Uncapitalize<'Hello'>; // "hello"
>TN1 : "hello"
type TN2 = Uncapitalize<'Foo' | 'Bar'>; // "foo" | "bar"
>TN2 : "foo" | "bar"
type TN3 = Uncapitalize<string>; // Uncapitalize<string>
>TN3 : Uncapitalize<string>
type TN4 = Uncapitalize<any>; // Uncapitalize<`${any}`>
>TN4 : Uncapitalize<any>
type TN5 = Uncapitalize<never>; // never
>TN5 : never
type TN6 = Uncapitalize<42>; // Error
>TN6 : 42
type TX1<S extends string> = Uppercase<`aB${S}`>;
>TX1 : `AB${Uppercase<S>}`
type TX2 = TX1<'xYz'>; // "ABXYZ"
>TX2 : "ABXYZ"
type TX3<S extends string> = Lowercase<`aB${S}`>;
>TX3 : `ab${Lowercase<S>}`
type TX4 = TX3<'xYz'>; // "abxyz"
>TX4 : "abxyz"
type TX5 = `${Uppercase<'abc'>}${Lowercase<'XYZ'>}`; // "ABCxyz"
>TX5 : "ABCxyz"
type MyUppercase<S extends string> = intrinsic; // Error
>MyUppercase : intrinsic
function foo1<T extends string, U extends T>(s: string, x: Uppercase<T>, y: Uppercase<U>) {
>foo1 : <T extends string, U extends T>(s: string, x: Uppercase<T>, y: Uppercase<U>) => void
>s : string
>x : Uppercase<T>
>y : Uppercase<U>
s = x;
>s = x : Uppercase<T>
>s : string
>x : Uppercase<T>
s = y;
>s = y : Uppercase<U>
>s : string
>y : Uppercase<U>
x = s; // Error
>x = s : string
>x : Uppercase<T>
>s : string
x = y;
>x = y : Uppercase<U>
>x : Uppercase<T>
>y : Uppercase<U>
y = s; // Error
>y = s : string
>y : Uppercase<U>
>s : string
y = x; // Error
>y = x : Uppercase<T>
>y : Uppercase<U>
>x : Uppercase<T>
}
function foo2<T extends 'foo' | 'bar'>(x: Uppercase<T>) {
>foo2 : <T extends "foo" | "bar">(x: Uppercase<T>) => void
>x : Uppercase<T>
let s: 'FOO' | 'BAR' = x;
>s : "FOO" | "BAR"
>x : "FOO" | "BAR"
}
declare function foo3<T extends string>(x: Uppercase<T>): T;
>foo3 : <T extends string>(x: Uppercase<T>) => T
>x : Uppercase<T>
function foo4<U extends string>(x: Uppercase<U>) {
>foo4 : <U extends string>(x: Uppercase<U>) => U
>x : Uppercase<U>
return foo3(x);
>foo3(x) : U
>foo3 : <T extends string>(x: Uppercase<T>) => T
>x : Uppercase<U>
}