自动类型判断
TS拥有自动的类型判断机制
当对变量的声明和赋值是同时进行的,TS编译器会自动判断变量的类型,所以如果你的变量的声明和赋值时同时进行的,可以省略掉类型声明。
类型推论
如果没有明确的指定类型,那么 TypeScript
会依照类型推论(
Type Inference
)的规则推断出一个类型。
let x = 'doudou';
x = 22; //类型推断为x为string,赋值22(number类型)时会报错。
如果定义的时候没有赋值,不管之后有没有赋值,都会被推断成 any
类型。
let x;
x = 'doudou';
x = 22;
类型别名
类型别名用来给一个类型起个新名字,使用 type 创建类型别名,类型别名常用于联合类型。在实际应用中,有些类型名字比较长或者难以记忆,重新命名是一个较好的解决方案。
// 创建一个string别名
type newType = string | number;
// 使用别名
let x : newType = "doudou";
// 或
let x : newType = 22;
联合类型-Union Type
联合类型表示的值可能是多种不同类型当中的某一个。 联合类型放宽了类型的取值的范围,也就是说值的范围不再限于某个单一的数据类型。同时,它也不是无限制地放宽取值的范围,如果那样的话,完全可以使用 any 代替。
联合类型使用 |
分隔每个类型。
// 给多个类型创建一个名字
type newType = string | number;
// 可以在赋值的时候赋值字符串与数字
let x : newType = "doudou"
let x : newType = 22
// 或
let x : string | number;
x = 'doudou';
x = 22;
访问联合类型的属性或方法
当 TypeScript
不确定一个联合类型的变量到底是哪个类型的时候,我们
只能访问此联合类型的所有类型
里共有的属性或方法。
function fun(x : string | number): number {
return x.length; //报错,number没有length属性,联合类型只能访问共有的属性和方法。
}
function fun(x : string | number): string {
return x.toString(); //toString为string、number共有的方法
}
联合类型的变量在被赋值的时候,会根据类型推论的规则推断出一个类型。
let x : string | number;
x = 'doudou';
console.log(x.length); // 6
x = 22;
console.log(x.length); // 报错