Skip to content

Commit 4574b8d

Browse files
committed
feat:新增目录
1 parent 32dbbab commit 4574b8d

File tree

8 files changed

+110
-17
lines changed

8 files changed

+110
-17
lines changed

docs/typescript/condition.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
---
2+
title: 条件类型
3+
order: 12
4+
toc: menu
5+
nav:
6+
title: TypeScript
7+
---
8+
9+
## 基本使用
10+
11+
条件类型够表示非统一的类型,以一个条件表达式进行类型关系检测,从而在两种类型中选择其一:
12+
13+
```javascript
14+
// 若T能赋给U,那么类型是X,否则为Y,有点类似于JavaScript中的三元表达式
15+
type myType<T> = T extends number ? X : Y
16+
```
17+
18+
```javascript
19+
interface Fish {
20+
fishName: string;
21+
}
22+
interface Water {
23+
water(): void;
24+
}
25+
interface Bird {
26+
birdName: string;
27+
}
28+
interface Sky {
29+
(): string;
30+
}
31+
32+
type condition<T> = T extends Fish ? Water : Sky;
33+
34+
let c: condition<Bird> = function sky() {
35+
return 'happy';
36+
};
37+
```
38+
39+
## 条件类型与联合类型
40+
41+
条件类型有一个特性,就是「分布式有条件类型」,但是分布式有条件类型是有前提的,条件类型里待检查的类型必须是`naked type parameter`
42+
43+
`naked type parameter`:裸类型参数,是指类型参数没有被包装在其他类型里,比如没有被数组、元组、函数、Promise 等等包裹([更多参考](https://juejin.cn/book/6844733813021491207/section/6844733813139079182)

docs/typescript/cross.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,11 @@ function fn(): never {
4040
}
4141
let it: It = { name: fn() };
4242
```
43+
44+
```javascript
45+
function mixin<T extends object, K extends object>(a: T, b: K): T & K {
46+
return { ...a, ...b };
47+
}
48+
49+
mixin({ username: 'rain' }, { age: 1 });
50+
```

docs/typescript/customType.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
title: 自定义类型
3+
order: 14
4+
toc: menu
5+
nav:
6+
title: TypeScript
7+
---

docs/typescript/declare.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
title: 编写声明文件
3+
order: 15
4+
toc: menu
5+
nav:
6+
title: TypeScript
7+
---

docs/typescript/generic.md

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ function handleCallback<T>(count: T): T {
2626
return count;
2727
}
2828

29-
handleCallback<number>(1);
30-
handleCallback<string>('hello');
29+
handleCallback < number > 1;
30+
handleCallback < string > 'hello';
3131
```
3232

3333
## 函数中使用泛型
@@ -53,6 +53,7 @@ handleGeneric2<number>([1, 2, 3]);
5353
```
5454

5555
## 泛型约束
56+
5657
```javascript
5758

5859
function handleAdd<T extends number, K extends number>(num1: T, num2: K) {
@@ -61,67 +62,73 @@ function handleAdd<T extends number, K extends number>(num1: T, num2: K) {
6162

6263
handleAdd(1, 2);
6364
```
65+
6466
## 属性约束
67+
6568
```javascript
66-
const getVal = <T extends Object, K extends keyof T>(obj: T, key: K) => {
69+
const getVal = <T extends object, K extends keyof T>(obj: T, key: K) => {
6770
console.log(obj[key]);
6871
}
6972

7073
getVal({ a: 1 }, 'a')
7174
```
7275

7376
## 默认泛型
77+
7478
```javascript
7579
interface IGen<T = string> {
76-
[key: string]: T
80+
[key: string]: T;
7781
}
7882

7983
type T1 = IGen;
80-
type T2 = IGen<number>
81-
type T3 = IGen<boolean>
84+
type T2 = IGen<number>;
85+
type T3 = IGen<boolean>;
8286

83-
let str: T1 = { username: 'rain' }
84-
let age: T2 = { age: 12 }
85-
let bool: T3 = { flag: false }
87+
let str: T1 = { username: 'rain' };
88+
let age: T2 = { age: 12 };
89+
let bool: T3 = { flag: false };
8690
```
8791

8892
## 接口中使用泛型
93+
8994
```javascript
9095
// 第一种 写在函数上的泛型表示调用函数时传入具体类型
9196
interface IG1 {
92-
<T, K>(count: T, num: K): void
97+
<T, K>(count: T, num: K): void;
9398
}
9499

95100
const handleGeneric1: IG1 = <T, K>(count: T, num: K): void => {
96101
console.log(count, num);
97-
}
102+
};
98103

99104
handleGeneric1(1, 1);
100105

101106
// 第二种 写在接口后面的泛型表示使用接口时传入具体类型
102107
interface IG2<T, K> {
103-
(count: T, num: K): void
108+
(count: T, num: K): void;
104109
}
105110

106111
const handleGeneric2: IG2<number, number> = <T, K>(count: T, num: K): void => {
107112
console.log(count, num);
108-
}
113+
};
109114
```
110115

111116
## 类型别名中使用泛型
117+
112118
```javascript
113-
type IG1 = <T, K>(count: T, num: K)=> void
119+
type IG1 = <T, K>(count: T, num: K) => void;
114120
const handleGeneric1: IG1 = <T, K>(count: T, num: K): void => {
115121
console.log(count, num);
116-
}
122+
};
117123

118-
type IG2<T, K> = (count: T, num: K)=> void
124+
type IG2<T, K> = (count: T, num: K) => void;
119125
const handleGeneric2: IG2<number, number> = <T, K>(count: T, num: K): void => {
120126
console.log(count, num);
121-
}
127+
};
122128
```
123129

124130
## 类中使用泛型
131+
125132
```javascript
126133
class Person<T> {
127134
arr: T[] = [];

docs/typescript/innerType.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
title: 内置类型
3+
order: 13
4+
toc: menu
5+
nav:
6+
title: TypeScript
7+
---

docs/typescript/other.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
title: 其他特性
3+
order: 16
4+
toc: menu
5+
nav:
6+
title: TypeScript
7+
---

docs/typescript/practical.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
title: 实战
3+
order: 17
4+
toc: menu
5+
nav:
6+
title: TypeScript
7+
---

0 commit comments

Comments
 (0)