参考文档: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;
}
}