类型推论
什么是类型推论
如果没有明确的指定类型,那么 TypeScript 会依照类型推论(Type Inference)的规则推断出一个类型。
let myFavoriteNumber = 'seven'; myFavoriteNumber = 7;
以上代码虽然没有指定类型,但是会在编译时报错因为它实际等价于:
let myFavoriteNumber: string = 'seven'; myFavoriteNumber = 7;
因此TypeScript 会在没有明确的指定类型的时候推测出一个类型,这就是类型推论。
如果定义的时候没有赋值,不管之后有没有赋值,都会被推断成 any 类型而完全不被类型检查:
联合类型
联合类型(Union Types)表示取值可以为多种类型中的一种
举例:
let myFavoriteNumber: string | number; myFavoriteNumber = 'seven'; myFavoriteNumber = 7;
联合类型使用 | 分隔每个类型。
这里的 let myFavoriteNumber: string | number 的含义是,允许 myFavoriteNumber 的类型是 string 或者 number,但是不能是其他类型。
访问联合类型的属性或方法
当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型里共有的属性或方法:
举例:
function getLength(something: string | number): number { return something.length; } 报错信息// index.ts(2,22): error TS2339: Property 'length' does not exist on type 'string | number'. // Property 'length' does not exist on type 'number'.
报错原因是上例中,length 不是 string 和 number 的共有属性,所以会报错
function getString(something: string | number): string { return something.toString(); }
访问 string 和 number 的共有属性是没问题的: