Skip to content

Commit 8e661bb

Browse files
committed
💫 workflow(3-4):
1 parent 33e498c commit 8e661bb

File tree

5 files changed

+167
-1
lines changed

5 files changed

+167
-1
lines changed

‎README.md‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,8 @@
2929
- /medium/119
3030
- /medium/296 *
3131
- /medium/298 *
32-
- /medium/459 *
32+
- /medium/459 *
33+
- /medium/529
34+
- /medium/531 *
35+
- /medium/599 *
36+
- /medium/610 *

‎medium/529-Absolute.ts‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
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 {};
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
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 {};

‎medium/599-Merge.ts‎

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
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 {};

‎medium/610-CamelCase.ts‎

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
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+
*/

0 commit comments

Comments
 (0)