Skip to content

Commit 98a26b5

Browse files
committed
✨ interface完成
1 parent 5a46c63 commit 98a26b5

File tree

3 files changed

+210
-1
lines changed

3 files changed

+210
-1
lines changed

config/config.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ export default {
22
mode: 'site',
33
title: 'code',
44
exportStatic: {},
5-
dynamicImport: {},
5+
dynamicImport: {
6+
loading: '@/docs/index.md'
7+
},
68
favicon: './favicon.ico',
79
logo: '/cherry.svg',
810
navs: [

docs/typescript/class.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,3 +214,19 @@ class Cat extends Animal {
214214
let tom = new Cat('Tom');
215215
console.log(tom.sleep); // sleep
216216
```
217+
218+
## 抽象类
219+
220+
抽象类不可以被实例化
221+
222+
```javascript
223+
namespace d {
224+
abstract class Animal {
225+
abstract name: string;
226+
}
227+
228+
class Dog extends Animal {
229+
name = 'rain';
230+
}
231+
}
232+
```

docs/typescript/interface.md

Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
---
2+
title: 接口
3+
order: 6
4+
toc: menu
5+
nav:
6+
title: TypeScript
7+
---
8+
9+
## 概述
10+
11+
- 接口的含义:在面向对象编程中表示行为的抽象,或者描述对象的形状
12+
- 接口的作用:为这些类型命名和为你的代码或第三方代码定义契约
13+
14+
## 基本使用
15+
16+
```javascript
17+
namespace d {
18+
interface IUser {
19+
username: string;
20+
age: number;
21+
}
22+
23+
const getUserName = (user: IUser) => user.username;
24+
25+
getUserName({ username: 'rain', age: 12 });
26+
}
27+
```
28+
29+
## 支持任意参数
30+
31+
```javascript
32+
namespace d {
33+
interface IUser {
34+
username: string;
35+
age: number;
36+
[key: string]: any;
37+
}
38+
39+
const getUserName = (user: IUser) => user.username;
40+
41+
getUserName({ username: 'rain', age: 12, sex: 'male' });
42+
}
43+
44+
```
45+
46+
## 接口继承接口
47+
48+
```javascript
49+
interface IUser {
50+
name: string;
51+
age: number;
52+
}
53+
54+
interface IExtendUser extends IUser {
55+
sex: string;
56+
}
57+
```
58+
59+
## 类继承多个接口
60+
61+
```javascript
62+
namespace d {
63+
// 接口中的内容是抽象的,没有具体实现
64+
interface IUser {
65+
speak(name: string): void; // 描述类的原型方法时,如果为void代表不关心方法的返回值
66+
count: number;
67+
}
68+
69+
interface IHome {
70+
adress: string;
71+
}
72+
73+
class User implements IUser, IHome {
74+
speak(name: string): string {
75+
return 'rain';
76+
}
77+
public count!: number;
78+
adress!: string;
79+
}
80+
}
81+
82+
```
83+
84+
## `type``interface`区别
85+
86+
- 相同点:
87+
88+
- 都可以描述一个对象或者函数
89+
90+
```javascript
91+
// interface
92+
interface IUser {
93+
name: string;
94+
age: number;
95+
}
96+
97+
interface ISetUser {
98+
(name: string, age: number): void;
99+
}
100+
101+
// type
102+
type myUser = {
103+
name: string,
104+
age: string,
105+
};
106+
107+
type setMyUser = (name: string, age: number) => void;
108+
```
109+
110+
- 拓展(extends)与 交叉类型(Intersection Types)
111+
112+
```javascript
113+
// interface可以extends,但type是不允许extends和implement的
114+
// type可以通过交叉类型实现interface的extend行为
115+
// 两者不是相互独立的,interface可以继承type,type也可以与nterface类型交叉
116+
117+
// interface extends interface
118+
interface IName {
119+
name: string;
120+
}
121+
interface IUser extends IName {
122+
age: number;
123+
}
124+
// type 与 type 交叉
125+
type myName = {
126+
name: string,
127+
};
128+
type myUser = myName & { age: number };
129+
130+
// interface extends type
131+
interface IExtend extends myName {
132+
age: number;
133+
}
134+
// type 与 interface 交叉
135+
type User = IName & {
136+
age: number,
137+
};
138+
```
139+
140+
- 不同点:
141+
142+
- type 可以声明基本类型别名,联合类型,元组等类型
143+
144+
```javascript
145+
// 基本类型别名
146+
type Name = string
147+
148+
// 联合类型
149+
interface Dog {
150+
wong();
151+
}
152+
interface Cat {
153+
miao();
154+
}
155+
156+
type Pet = Dog | Cat
157+
158+
// 具体定义数组每个位置的类型
159+
type PetList = [Dog, Pet]
160+
```
161+
162+
- `type`语句中还可以使用`typeof`获取实例的类型进行赋值
163+
```javascript
164+
// 当你想获取一个变量的类型时,使用 typeof
165+
let div = document.createElement('div');
166+
type B = typeof div;
167+
```
168+
- `interface`可以声明合并
169+
170+
```javascript
171+
interface User {
172+
name: string
173+
age: number
174+
}
175+
176+
interface User {
177+
sex: string
178+
}
179+
180+
/*
181+
User 接口为 {
182+
name: string
183+
age: number
184+
sex: string
185+
}
186+
*/
187+
```
188+
189+
**type 关键字的产生的东西官方有一个名字 type aliases ,就是类型别名,重点是它是别名不是真正的类型**
190+
191+
更多内容参考:https://github.com/SunshowerC/blog/issues/7

0 commit comments

Comments
 (0)