# TypeScript
# 练习目录
各种范型类型实现
# type 和 interface 区别
相同点
- 接口定义的两种不同形式,都可以描述一个对象或者函数
- 都支持继承,而且可以互相继承,但是语法有差异
不同点
- type 可以声明基本类型别名,联合类型,元组等类型
// 基本类型别名
type Name = string;
// 联合类型
interface Dog {
wong();
}
interface Cat {
miao();
}
type Pet = Dog | Cat;
// 具体定义数组每个位置的类型
type PetList = [Dog, Pet];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- type 语句中可以使用 typeof 获取实例的类型进行赋值
// 当你想获取一个变量的类型时,使用 typeof
let div = document.createElement("div");
type B = typeof div;
1
2
3
2
3
- type 可以申明联合类型,如 type unionType = myType1 | myType2
- type 可以申明元组类型,如 type yuanzu = [myType1, myType2]
- interface 可以声明合并,type 的话会报重复定义
interface test {
name: string;
}
interface test {
age: number;
}
/*
test实际为 {
name: string
age: number
}
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# TS 里面有哪些 JavaScript 没有的类型
- any: 可以赋予任意类型的值
- tuple: 元组类型用来表示已知元素数量和类型的数组,各元素的类型不必相同,对应位置的类型需要一样 let x: [string, number];
- enum: 枚举类型用于定义值集合
- void:标识方法返回值的类型,表示方法没有返回值
- never: 是其它类型(包括 null 和 undefined)的子类型,是不会发生的类型。例如,never 总是抛出异常或永不返回的异常的函数表达式的返回类型
- unknown: 未知类型,一般在使用后再手动转具体的类型
- union: 联合类型,多种类型之一 string | number; // string 或 number
- intersection: 交叉类型,多种类型合并 { a: string; } & { b: number; } // => { a: string; b: number }
- Generics: 泛型