基础数据类型
如何为基础类型标注?
- 语法: 在变量名后写
: 类型, 如const num: number = 1; - 推断: 有初始化表达式时通常可省略标注, 由编译器推断;
- 常见标量:
boolean、number、string、symbol、bigint;
const isDone: boolean = false;
const num: number = 1;
const myName: string = "Tom";
void、undefined、null 分别表示什么?
void: 没有任何类型, 常用于没有返回值的函数;undefined: 变量没有值时的初始状态;null: 表示空值;
const alertName = (): void => {
console.log("My name is Tom");
};
const u: undefined = undefined;
const n: null = null;
- 子类型关系:
undefined与null是其他类型的子类型, 可赋给number等类型; - 边界: 该行为仅在
strictNullChecks关闭时成立; 开启后两者只能赋给自身、any、unknown或可选属性;
let num: number = undefined; // strictNullChecks 关闭时合法
any、unknown、never 有什么区别?
| 类型 | 能接收的值 | 能赋给其他类型 | 访问属性与方法 | 典型场景 |
|---|---|---|---|---|
any | 任意值 | 可以 | 可以 | 放弃类型检查 |
unknown | 任意值 | 只能赋给 any | 需先断言 | 类型未知的输入 |
never | 没有值 | 可以 | 不可访问 | 抛异常或死循环 |
let anyThing: any = "Tom";
anyThing.toFixed(1); // 编译通过
const unknownValue: unknown = 1;
(unknownValue as number).toFixed(1); // 先断言再使用
const fail = (): never => {
throw new Error("never returns");
};
any与unknown都能接收任意值, 差别在取出时的检查强度;never是底部类型: 没有值能赋给它, 它能赋给任何类型, 表示函数永不返回;