1. number
let num: number = 1;
2. string
let name: string = "Heylzh";
3. boolean
let flag: boolean = true;
4. symbol
let sym: symbol = Symbol("symbolType");
5. null
let value: null = null;
// 拓展:null值不仅能赋值给null类型
let value1: any = null;
let value2: unknown = null;
6. undefined
let value: undefined = undefined;
// 拓展:undefined值不仅能赋值给undefined类型
let value1: any = undefined;
let value2: unknown = undefined;
7. Object / {}
可以理解为是除了 null、undefined 以外所有类型的根类型,所以可以赋值给除了 null、undefined 以外的任何值。
let value: Object = 1;
value = "1";
value = true;
value = {
name: "Tom",
};
8. Array
let Arr: Array<any> = [];
let Arr1: any[] = [];
9. object
let obj: object = { name: "Tom" };
10. function
const fun: () => void = () => { };
fun();
type Fun = (param: number) => number;
const fun1: Fun = (param) => { return param }
fun1(1);
代替常量、语义化
11. 数字枚举
数字枚举可以双向取值,默认枚举值从0开始递增。
enum Status {
"auto",
"open",
"close",
}
console.log(Status.close); // 2
console.log(Status["close"]); // 2
console.log(Status[1]); // open
自定义枚举值
enum Status {
"auto",
"open" = 3,
"close",
}
console.log(Status.auto); // 0
console.log(Status.close); // 4
console.log(Status["close"]); // 4
console.log(Status[1]); // undefined
console.log(Status[3]); // open
12. 字符串枚举
字符串枚举不支持双向取值
enum Status {
"auto" = "默认",
"open" = "打开",
"close" = "关闭",
}
console.log(Status.close); // 关闭
console.log(Status["close"]); // 关闭
console.log(Status["关闭"]); // 报错
字符串枚举中使用数字递增
enum Status {
"auto" = "默认",
"open" = 1,
"close",
}
console.log(Status.auto); // 默认
console.log(Status["auto"]); // 默认
console.log(Status[0]); // undefined
console.log(Status[1]); // open
console.log(Status["open"]); // 1
console.log(Status[2]); // close
console.log(Status["close"]); // 2
13. any
let value: any = 1;
value = "str";
value = true;
value = {
name: "Tom",
age: 1,
};
14. unknown
待补充
15. never
type Val = string | number;
const fun = (val: Val) => {
switch (typeof val) {
case "string":
console.log(val.concat("- is string"));
break;
case "number":
console.log(val.toFixed(2));
break;
default:
/**
* 当判断完val所有可预见的类型,再没有其他可能,此时val类型是 never
* ---------------------
* 假设后续将类型 Val 拓展为 string | number | boolean; 此时val类型为 boolean
* 下面赋值语句将报错。可以以此来提示开发者拓展类型的同时要为该类型补充逻辑代码,防止程序漏洞
*/
let _val: never = val; // 编译前报错,不能将类型“boolean”分配给类型“never”
throw Error("未定义该类型方法"); // 编译后报错
break;
}
};
fun(123);
16. void
待补充
17. 元组
待补充
18. 可变元组
待补充
19. 联合类型
let value: string | number = "str";
// 给定值后确定类型,可调用该类型方法
console.log(value.length);
value = 1;
console.log(value.toFixed(2));
20. 交叉类型
type Obj1 = {
name: string;
};
let obj1: Obj1 = { name: "Tom" };
type Obj2 = {
age: number;
};
let obj2: Obj2 = { age: 1 };
let obj3: Obj1 & Obj2 = { name: "jack", age: 2 };
21. 字面量类型
type Status = 1 | 2 | 3;
const fun = (status: Status) => { }
fun(1)