1、什么是TS
类型
- JS基本类型
- any类型
- 联合类型 string | number
数组
- let arr:number[] = [1,2,3]
let arr:number[] = [1,2,3]
- let arr:number[] = [1,2,3]
元组(限定了数据类型、对应位置的数组) ```javascript let tuple: [string, number] = [“11”, 1]; let tuple: [string, number] = [“11”, 1, true]; // 提示警告
- 接口 Interface
![image.png](https://cdn.nlark.com/yuque/0/2021/png/152077/1610791224550-8f709dda-16c8-4665-aff6-16ce0bf9e248.png#align=left&display=inline&height=577&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1154&originWidth=2018&size=383526&status=done&style=none&width=1009)<br />可选属性: ?<br />只读属性 readonly
- 函数
- 函数参数带有默认值,即是可选参数
```javascript
// 函数声明
function add(x: number, y: number, z: number = 10): number {
return x + y + z;
}
add(1, 2, 3);
// 函数表达式
const add2 = function (x: number, y: number, z: number = 10): number {
return x + y + z;
};
- 类Class
// 封装
class Animals {
name: string;
constructor(name: string) {
this.name = name;
}
run() {
console.log(`${this.name} is running`);
}
}
// 实例化
let cat = new Animals("多肉");
cat.run();
// 继承
class Dog extends Animals {
bark() {
console.log(`${this.name} is bark`);
}
}
// let dog = new Dog("dahuang");
// dog.bark();
// 多态 - 重写类的方法
class TuTu extends Animals {
constructor(name: string) {
super(name); // 通过super继承父类所有的属性
}
run() {
return "TuTu" + super.run(); // 重写父类的方法,通过super调用父类方法
}
}
let tutu = new TuTu("tangsan");
tutu.run();
类的修饰符
- public:公有(家里的空气,共享)
- private:私有(家里的老婆,独有)
- protected:受保护的,继承子类可以访问修改,实例化的不可访问修改(家里的财产,继承)
- static: 静态,属性或者方法跟类没有什么关联
readonly: 只读,不可修改
枚举 Enum
enum Direction { // 定义枚举
up = "upVal",
down = "downVal",
left = "leftVal",
right = "rightVal",
}
console.log(Direction.up); // "upVal"
// 双向访问
enum Direction2 {
up,
down,
left,
right,
}
console.log(Direction2.up); // 0
console.log(Direction2[0]); // up
泛型 Generics
function echo<T>(args: T): T {
return args;
}
let result = echo(123);
占位符,根据使用的时候来决定具体的类型
约束泛型:让传入的值满足特定的条件
定义了一个函数,其中函数里打印了某个可能不存在的属性,会报错
通过定义一个约束泛型(必须包含length的接口,并让泛型继承)来约束传入的参数必须包含length属性
- 类型别名 alias
- type
- 类型断言
- type assertion
input - input as String
- type assertion
类型推论
声明文件
- 使用第三方库时,为该库定义声明文件
- https://github.com/DefinitelyTyped/DefinitelyTyped