跳到主要内容

基础数据类型

如何为基础类型标注?​

  • 语法: 在变量名后写 : 类型, 如 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 是底部类型: 没有值能赋给它, 它能赋给任何类型, 表示函数永不返回;