类型别名
使用type定义类型
type Age=number;
const a:Age=12;
type user={
age:number,
name:string
}
const b:user={
age:10,
name:'李四'
}
类型别名存在块级作用域,里层定义的会覆盖外层
并集和交集
类型运算符:”|“和”&“
|
表示两个类型的并集
let a:number|string="李四";
a=12;
&
表示两个类型交集
type A = {
age: number;
weight:number,
};
type B = {
age: number;
name: string;
};
const user: B & A = { // 必须有两个type的所有属性,并不是相交那部分属性
age: 12,
name:"123",
weight:14,
};
数组
数组表示方法有:T[]或者Array其中T表示类型
type A = {
age: number;
weight:number,
};
const user: A[]= [{
age: 12,
weight:14,
}]
const user2: Array<A>= [{
age: 12,
weight:14,
}]
元组
array的子类型,特点:长度固定、各索引位上的值固定的已知类型
let b: [string, string, number] = ["hello", "word", 1]; // 长度固定、索引位置值固定
let c: [string, string, number?] = ["hello", "word"];// ?表示该值可以不存在
只读数组
let a: readonly number[] = [1, 2];
a.splice(0); // 报错不可修改只读数组
type A = readonly string[];
let c: A = ["hello"];
c[0] = "4"; // 报错 类型“A”中的索引签名仅允许读取
只读元组
let a: readonly [number, number] = [1, 2];
a[0]=4; // 报错 无法分配到 "0" ,因为它是只读属性
null以及undefined
和JS没区别
void
表示函数没有返回值
function fo(): void { // void 表示此函数没有返回值
console.log(13);
return 12 // 报错 因为你定义了没有返回值,所以会抛出不能将类型“number”分配给类型“void”。
}
never
函数根本不返回(抛出异常或者死循环)
枚举 enum
列举类型中包含的各个值,可以理解为编译时==“键固定的对象”==
enum Lanuage {
English = 0,
Spanish = 1,
}
enum Color {
Red = "#C10000",
white = "255",
}
console.log(Lanuage.English); // 0
console.log(Lanuage[1]); // 1
反向查找
枚举的类型支持反向查找,这样会有个问题,查不到的就是undefined,ts没法给你做校验他是否存在
enum Lanuage {
English = 0,
Spanish = 1,
}
console.log(Lanuage[1]); // 0
console.log(Lanuage[3]); // undefined
连续数值
如果是连续数值只需要定义第一个值,TS会自动+1
enum Lanuage {
English = 0,
Spanish, // 1 自动 +1
}
const enum 子类型禁止反向查找
使用const定义可以禁止反向查找
const enum Lanuage {
English = 0,
Spanish = 1,
}
console.log(Lanuage[1]); // 报错 只有使用字符串文本才能访问常数枚举成员。
enum与const enum编译成JS后的区别
enum
enum Lanuage {
English = 0,
Spanish = 1,
}
// 编译为:
var Lanuage;
(function (Lanuage) {
Lanuage[Lanuage["English"] = 0] = "English";
Lanuage[Lanuage["Spanish"] = 1] = "Spanish";
})(Lanuage || (Lanuage = {}));
const enum
不会编译为JS代码,所以使用const enum会减少编译后JS的包体积
类型小结
类型 | 子类型 |
---|---|
boolen | Boolen字面量 |
bigint | Bigint字面量 |
number | Number字面量 |
string | String字面量 |
symbol | unique symbol |
object | Object 字面量 |
数组 | 元组 |
enum | const enum |