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<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); // 0console.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
