类型推论
变量申明如果没有明确的指定类型,那么 TypeScript 会依照类型推论的规则推断出一个类型
let myNumber = 'seven';myNumber = 7; // Error// 等价于let myNumber: string = 'seven';myNumber = 7;// myNumer设置为string类型所以不能修改为数字类型
变量声明但是未赋值,会推论为 any
let x;x = 1;x = 'aaa'
联合类型
联合类型表示取值可以为多种类型中的一种,使用|分隔每个类型
let numberOrString: number | string;numberOrString = 10;numberOrString = "string";
访问联合类型的属性或方法
当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型里共有的属性或方法
错误示范: length不是string和number的共有属性
function getLength(value: string | number): number {return value.length;} // Error
正确示范
function getLength(value: string | number): string {return value.toString();}
联合类型的变量在被赋值的时候,会根据类型推论的规则推断出一个类型
let numberOrString: number | string;numberOrString = "string";console.log(numberOrString.length); // 6numberOrString = 10;console.log(numberOrString.length); // 报错
类型断言
- 不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型里共有的属性或方法
- 类型断言不是类型转换,断言成一个联合类型中不存在的类型是不允许的
类型断言有两种形式,第一种是“尖括号”<>语法,另一个为as语法
let str: any = "this is a string";let strLen: number = (<string>str).length;
function getLength(value: string | number): number {const str = value as string;if (str.length) {return str.length;} else {const number = value as number;return number.toString().length;}}
两种形式是等价的
