File tree Expand file tree Collapse file tree 5 files changed +167
-1
lines changed Expand file tree Collapse file tree 5 files changed +167
-1
lines changed Original file line number Diff line number Diff line change 29
29
- /medium/119
30
30
- /medium/296 *
31
31
- /medium/298 *
32
- - /medium/459 *
32
+ - /medium/459 *
33
+ - /medium/529
34
+ - /medium/531 *
35
+ - /medium/599 *
36
+ - /medium/610 *
Original file line number Diff line number Diff line change
1
+ /*
2
+ * @Date : 2022-03-04
3
+ * @Description : Absolute
4
+ */
5
+
6
+ type Test = "-100" ;
7
+ type Test2 = - 100 ;
8
+
9
+ type Absolute < T extends string | number | bigint > = `${T } ` extends `-${infer F } `
10
+ ? F
11
+ : T ;
12
+
13
+ type Result = Absolute < Test > ; // expected to be "100"
14
+ type Result2 = Absolute < Test2 > ; // expected to be "100"
15
+
16
+ export { } ;
Original file line number Diff line number Diff line change
1
+ /*
2
+ * @Date : 2022-03-04
3
+ * @Description : String to Union
4
+ */
5
+
6
+ type Test = "123" ;
7
+ type Test2 = "1" ;
8
+
9
+ type StringToUnion < T extends string > = T extends ""
10
+ ? never
11
+ : T extends `${infer F } ${infer R } `
12
+ ? F | StringToUnion < R >
13
+ : T ;
14
+
15
+ type Result = StringToUnion < Test > ; // expected to be "1" | "2" | "3"
16
+ type Result2 = StringToUnion < Test2 > ; // expected to be "1"
17
+
18
+ export { } ;
Original file line number Diff line number Diff line change
1
+ /*
2
+ * @Date : 2022-03-04
3
+ * @Description : Merge
4
+ */
5
+
6
+ /**
7
+ * Merge two types into a new type. Keys of the second type
8
+ * overrides keys of the first type.
9
+ */
10
+
11
+ type Test1 = {
12
+ name : string ;
13
+ age : 1 ;
14
+ } ;
15
+
16
+ type Test2 = {
17
+ name : number ;
18
+ age : number ;
19
+ class : string ;
20
+ } ;
21
+
22
+ //type Merge<T, K> = {
23
+ // //[P in keyof T | keyof K]: P extends keyof K ? K[P] : never;
24
+ // [P in keyof K]: K[P];
25
+ //} & {
26
+ // [X in Exclude<keyof T, keyof K>]: T[X];
27
+ //};
28
+ type Merge <
29
+ T extends Record < string , unknown > ,
30
+ K extends Record < string , unknown >
31
+ > = {
32
+ [ P in keyof T | keyof K ] : P extends keyof K
33
+ ? K [ P ]
34
+ : P extends keyof T
35
+ ? T [ P ]
36
+ : never ;
37
+ } ;
38
+
39
+ type Result = Merge < Test1 , Test2 > ; // expected to be {name:number,age:number}
40
+
41
+ export { } ;
Original file line number Diff line number Diff line change
1
+ /*
2
+ * @Date : 2022-03-04
3
+ * @Description : CamelCase
4
+ */
5
+
6
+ //for-bar-baz -> forBarBaz
7
+ const characterMap = {
8
+ a : "A" ,
9
+ b : "B" ,
10
+ c : "C" ,
11
+ d : "D" ,
12
+ e : "E" ,
13
+ f : "F" ,
14
+ g : "G" ,
15
+ h : "H" ,
16
+ i : "I" ,
17
+ j : "J" ,
18
+ k : "K" ,
19
+ l : "L" ,
20
+ m : "M" ,
21
+ n : "N" ,
22
+ o : "O" ,
23
+ p : "P" ,
24
+ q : "Q" ,
25
+ r : "R" ,
26
+ s : "S" ,
27
+ t : "T" ,
28
+ u : "U" ,
29
+ v : "V" ,
30
+ w : "W" ,
31
+ x : "X" ,
32
+ y : "Y" ,
33
+ z : "Z" ,
34
+ } as const ;
35
+
36
+ type characterType = typeof characterMap ;
37
+
38
+ type Test = "for-bar-baz" ;
39
+ type Test2 = "ar-baz" ;
40
+ type Test3 = "baz" ;
41
+
42
+ type transform < T extends string > = T extends keyof characterType
43
+ ? characterType [ T ]
44
+ : T ;
45
+ type MyCapitalize < T extends string > = T extends `${infer R } ${infer U } `
46
+ ? `${transform < R > } ${U } `
47
+ : never ;
48
+
49
+ type CamelCase < T extends string > = T extends `${infer F } -${infer R } `
50
+ ? CamelCase < `${F } ${MyCapitalize < R > } `>
51
+ : T ;
52
+
53
+ type Result = CamelCase < Test > ; //expected to be 'FooBarBaz'
54
+
55
+ type Result2 = CamelCase < Test2 > ; //expected to be 'arBaz'
56
+ type Result3 = CamelCase < Test3 > ; //expected to be 'baz'
57
+
58
+ export { } ;
59
+
60
+ /** https://github.com/type-challenges/type-challenges/issues/6269
61
+ * type CamelCase<S extends string> =
62
+ S extends ""
63
+ ?
64
+ ""
65
+ :
66
+ S extends `${infer A}${infer B}`
67
+ ?
68
+ A extends '-'
69
+ ?
70
+ B extends `${infer C}${infer D}`
71
+ ?
72
+ C extends Uppercase<C>
73
+ ?
74
+ `${A}${CamelCase<B>}`
75
+ :
76
+ `${Uppercase<C>}${CamelCase<D>}`
77
+ :
78
+ B extends Uppercase<B>
79
+ ?
80
+ `-${B}`
81
+ :
82
+ `${Uppercase<B>}`
83
+ :
84
+ `${A}${CamelCase<B>}`
85
+ :
86
+ S
87
+ */
You can’t perform that action at this time.
0 commit comments