Typescript 基础
2021-12-26 07:47:11

类型推论,类型断言,类型守卫

类型推论

参考文档:type inference

类型推论是 tsc 提供的一种方便的特性,即, tsc 可以自动推断出 一些变量的类型,而不依赖类型声明。在接下来使用这些变量时,tsc 的类型检查将会自动生效。在大多数使用 TS 的情景中,我们其实都无需手动声明类型,而只需要像书写 JS 一样给声明的变量赋值,并依赖 tsc 类型推论带来的良好体验即可。

🅰️: 在 VS Code 中将鼠标悬停在变量上检查变量的类型。

// aNumber: number
let aNumber = 1;

//student: {name: string; age: number;}
let student = {
    name: 'string',
    age: 20
};

// xTuple: (number | null)[]
let xTuple = [0, 1, null];

类型断言

参考文档:type assertions

类型断言是程序员凌驾于 TS 类型检查的一种简单方式,在使用联合类型或者 any 类型的时候,我们可以告诉编译器这个变量具体的类型。

// 使用用 as 关键字告诉 tsc 将 str 视作 string。
// 则 tsc 提供的代码联想和类型检查又生效了。
// 这样的写法容易带来运行时错误?
function getLength(input: string | number): number {
  const str = input as string;
  if (str.length) {
    return str.length;
  } else {
    const number = input as number;
    return number.toString().length;
  }
}

类型守卫

参考文档:type guard

类型守卫是通过在代码中添加类型判断来获得 tsc 类型检查增益的一种编写方式。

// typescript 在不同的条件分支里面,智能地缩小类型范围
// tsc 在分支内提供代码联想等功能
// tsc 的类型检查进化了
function getLength2(input: string | number): number {
  if (typeof input === 'string') {
    return input.length;
  } else {
    return input.toString().length;
  }
}