forked from pagers-org/Effective-TypeScript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path01.ts
More file actions
50 lines (35 loc) Β· 1.2 KB
/
01.ts
File metadata and controls
50 lines (35 loc) Β· 1.2 KB
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
// 1. νμ
μ€ν¬λ¦½νΈκ° λ€μμ νμ
μΆλ‘ ν μ μκ² λ°κΏμ£ΌμΈμ.
const person = {
name: 'Joe',
age: 10,
country: 'ko',
sex: 'male',
};
type arr1 = ['a', 'b', 'c']
type arr2 = [1, 2, 3]
// type Arr<T extends any[]> = T;
// type First<T> = T extends Arr<infer A> ? A : any;
// type First<T extends unknown[]> = T[0] // κ°λ₯
// never[] <-- μ§μ ν λΉ λ°°μ΄
// type First<T extends unknown[]> = T extends never[] ? never : T[0];
type First<T extends unknown[]> = T extends [infer F, ...unknown[]] ? F : never
type head1 = First<arr1>;
type head2 = First<arr2>;
type Last<T extends unknown[]> = T extends [...unknown[], infer L] ? L : never
type tail1 = Last<arr1>;
type tail2 = Last<arr2>;
type Fn<A extends number[]> = (...args:A) => any;
type FnArgs<T> = T extends Fn<infer A> ? A : any;
function test(name: number) {
// κ° κ³΅κ°
return 3
}
type TestFn = FnArgs<typeof test>;
type StrFn = (input: string) => string;
const getSHA: StrFn = (input: string) => {
return input;
};
type PromiseFn<T> = T extends (...args: infer A) => infer R ? (...args: A) => Promise<R> : T;
const getSHAAsync: PromiseFn<StrFn> = (input: string) =>{
return new Promise((res) => input);
}