类型推断
如果没有明确的指定类型,那么TypeScript
会依照类型推论的规则推断出一个类型
什么是类型推断
let test = 'test';
test = 7; //error
上面这段代码虽然没有指定类型,但在编译时会报错,因为它等价于:
let test: string = 'test';
test = 7; //error
TypeScript 会在没有明确的指定类型的时候推测出一个类型,这就是类型推论。
如果顶的时候没有赋值,那么这个变量会被推断为any
类型,之后任何赋值都不会报错:
let test;
/*
* 等价于这样写
*/
let test: any;
test = 'test';
test = 7;
什么是联合类型
联合类型表示取值可以为多种类型中的一种。
let test: string | number;
test = 'test';
test = 7;
test = []; //error
联合类型使用|
分隔每个类型。
let test: string | number
的意思是,允许test
的类型是string
或者number
,不允许其他类型。
联合类型的坑
当我们将一个变量定义为联合类型时,我们只能访问此联合类型中所有类型的公用方法和属性。
function fn(value: number | string){
return value.length;
}
//Error: Property 'length' does not exist on type
//'string | number'.Property 'length' does not
//exist on type 'number'.
在这个例子中,length
不是string
和number
的共有属性,所以报错。
联合类型的变量在被赋值时,会根据类型推断的规则推断出一个类型。