Skip to content

Commit 33e498c

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

File tree

8 files changed

+150
-1
lines changed

8 files changed

+150
-1
lines changed

‎README.md‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,9 @@
2424
- /medium/20
2525
- /medium/106
2626
- /medium/108
27-
- /medium/110 *
27+
- /medium/110 *
28+
- /medium/116
29+
- /medium/119
30+
- /medium/296 *
31+
- /medium/298 *
32+
- /medium/459 *

‎medium/116-Replace.ts‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/*
2+
* @Date: 2022-03-04
3+
* @Description: Replace
4+
*/
5+
6+
type Replace<
7+
T extends string,
8+
K extends string,
9+
U extends string
10+
> = T extends `${infer S}${K}${infer R}` ? `${S}${U}${R}` : T;
11+
12+
type replaced = Replace<"types are fun!", "fun", "awesome">; // expected to be 'types are awesome!'
13+
14+
export {};

‎medium/119-ReplaceAll.ts‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/*
2+
* @Date: 2022-03-04
3+
* @Description: ReplaceAll
4+
*/
5+
6+
type ReplaceAll<
7+
T extends string,
8+
K extends string,
9+
U extends string
10+
> = T extends `${infer S}${K}${infer R}` ? ReplaceAll<`${S}${R}`, K, U> : T;
11+
12+
type replaced = ReplaceAll<"t y p e s", " ", "">; // expected to be 'types'
13+
14+
export {};
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/*
2+
* @Date: 2022-03-04
3+
* @Description: Append Argument
4+
*/
5+
6+
type Fn = (a: number, b: string) => number;
7+
8+
type AppendArgument<T extends (...args: any[]) => any, K> = T extends (
9+
...args: infer R
10+
) => any
11+
? (...args: [...R, K]) => any
12+
: never;
13+
14+
type Result = AppendArgument<Fn, boolean>;
15+
// expected be (a: number, b: string, x: boolean) => number
16+
17+
export {};

‎medium/296-Purmutation.ts‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* @Date: 2022-03-04
3+
* @Description: Purmutation
4+
*/
5+
6+
type Permutation<T, U = T> = T extends [never]
7+
? []
8+
: T extends any
9+
? [T, ...Permutation<Exclude<U, T>>]
10+
: U;
11+
12+
type perm = Permutation<"A" | "B" | "C">; // ['A', 'B', 'C'] | ['A', 'C', 'B'] | ['B', 'A', 'C'] | ['B', 'C', 'A'] | ['C', 'A', 'B'] | ['C', 'B', 'A']
13+
14+
//type Permutation2<T, U = T> = T extends [never]
15+
// ? []
16+
// : T extends any
17+
// ? [T, ...Permutation2<Exclude<U, T>>]
18+
// : U;
19+
20+
export {};
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/*
2+
* @Date: 2022-03-04
3+
* @Description: Length of String
4+
*/
5+
6+
type title = "title";
7+
8+
type LengthOfString<
9+
T extends string,
10+
U extends string[] = []
11+
> = T extends `${infer F}${infer R}`
12+
? LengthOfString<R, [F, ...U]>
13+
: U["length"];
14+
15+
type x = LengthOfString<title>;
16+
17+
export {};
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
* @Date: 2022-03-04
3+
* @Description: Append to Obejct
4+
*/
5+
6+
type Test = { id: "1" };
7+
8+
type AppendToObject<
9+
T extends Record<string, any>,
10+
K extends string | symbol | number,
11+
U extends any
12+
> = {
13+
[P in keyof T]: T[P];
14+
} & Record<K, U>;
15+
16+
type Result = AppendToObject<Test, "value", 4>; // expected to be { id: '1', value: 4 }
17+
18+
const res: Result = {
19+
id: "1",
20+
value: 4,
21+
};
22+
23+
type AppendToObject2<
24+
T,
25+
K extends string | number | symbol,
26+
V extends unknown
27+
> = {
28+
[P in keyof T | K]: P extends keyof T ? T[P] : V;
29+
};
30+
31+
type Result2 = AppendToObject2<Test, "value", 4>; // expected to be { id: '1', value: 4 }
32+
33+
const res2: Result2 = {
34+
id: "1",
35+
value: 4,
36+
};
37+
38+
export {};

‎medium/459-Flattern.ts‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* @Date: 2022-03-04
3+
* @Description: Flatten
4+
*/
5+
6+
type Flatten<T extends any[]> = T extends [infer F, ...infer R]
7+
? F extends any[]
8+
? R["length"] extends 0
9+
? [...Flatten<F>]
10+
: [...Flatten<F>, ...Flatten<R>]
11+
: [F, ...Flatten<R>]
12+
: [];
13+
14+
type flatten = Flatten<[1, 2, [3, 4], [[[5]]]]>; // [1, 2, 3, 4, 5]
15+
16+
//type Flatten2<T extends any[]> = T extends [infer F, ...infer R]
17+
// ? F extends any[]
18+
// ? [...Flatten<F>, ...Flatten<R>]
19+
// : [F, ...Flatten<R>]
20+
// : [];
21+
22+
//type flatten2 = Flatten2<[1, 2, [3, 4], [[[5]]]]>; // [1, 2, 3, 4, 5]
23+
24+
export {};

0 commit comments

Comments
 (0)