-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path1-generics.ts
62 lines (54 loc) · 1.23 KB
/
1-generics.ts
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
/**
* Generics (泛型):
* 讓「型別」也變成一個「變數」,可以根據不同的情況套用不同的型別
*/
interface User {
uid: number;
name: string;
balance: number;
}
const user: User = {
uid: 12345,
name: 'Charlie',
balance: 1000,
};
interface Generics<T> {
uid: number;
name: string;
balance: T;
}
const user2: Generics<number> = {
uid: 12345,
name: 'Charlie',
balance: 1000,
};
/**
* Generic Constraints(泛型限制):
* 泛型就像一個型別為 any 的變數一樣,使用者愛帶什麼型別都可以,但可以透過 extends 來為它加上限制
*/
interface GenericsConstraints<T extends number | string> {
uid: number;
name: string;
balance: T;
}
const user3: GenericsConstraints<number> = {
uid: 12345,
name: 'Charlie',
balance: 1000,
};
/**
* Generic Default Parameter (泛型參數的預設值)
* 泛型參數的預設值的用法,類似於 JavaScript 函式的參數預設值一樣
*/
interface GenericDefaultParameter<T extends string | number = number> {
uid: number;
name: string;
balance: T;
}
// 沒有帶入型別參數的話,會套用預設值
const user4: GenericDefaultParameter = {
uid: 12345,
name: 'Charlie',
balance: 1000,
};
export {};