TypeScript 初识 - 类型推论
基础
定义一个变量的时候,如果没有指定明确的类型,TypeScript 会根据赋的值推断出变量的类型:
let x = 3; // Error, Type 'string' is not assignable to type 'number'. x = '3';
如果定义的时候没有赋值,不管之后有没有赋值,都会被推断成 any
类型而完全不被类型检查:
let myFavoriteNumber; myFavoriteNumber = 'seven'; myFavoriteNumber = 7;
最佳通用类型
当需要从几个表达式中推断类型时候,会使用这些表达式的类型来推断出一个最合适的通用类型:
const x = [0, 1, null];
首先会判断出 x
是一个数组,然后根据数组里的所有内容判断 x
最佳匹配类型:(number | null)[]
。
上下文类型
TypeScript 不止会根据赋的值进行类型推论,还会根据变量所在位置的上下文进行推论:
window.onmousedown = function(mouseEvent) { // Error console.log(mouseEvent.button); }; function(mouseEvent) { // 编译通过 console.log(mouseEvent.button); };
TypeScript 类型检查器使用 Window.onmousedown
函数的类型来推断右边函数表达式的类型。因此,就能推断出 mouseEvent
参数的类型了。如果函数表达式不是在上下文类型的位置,mouseEvent
参数的类型需要指定为 any
,这样也不会报错了。
如果上下文类型表达式包含了明确的类型信息,上下文的类型会被忽略。重写上面的例子:
window.onmousedown = function(mouseEvent: any) { // 编译通过 console.log(mouseEvent.button); };
上下文归类会在很多情况下使用到。通常包含函数的参数,赋值表达式的右边,类型断言,对象成员和数组字面量和返回值语句。 上下文类型也会做为最佳通用类型的候选类型。比如:
function createZoo(): Animal[] { return [new Rhino(), new Elephant(), new Snake()]; }
这个例子里,最佳通用类型有 4 个候选者:Animal
,Rhino
,Elephant
和 Snake
。 当然,Animal
会被做为最佳通用类型。
相关推荐
changcongying 2020-11-02
changcongying 2020-10-30
苗疆三刀的随手记 2020-10-29
zouph000 2020-10-25
Jruing 2020-10-23
ctg 2020-10-14
PMJ0 2020-10-13
ChaITSimpleLove 2020-10-06
小飞侠V 2020-09-25
QiaoranC 2020-09-25
changcongying 2020-09-17
taizuduojie 2020-09-15
淼寒儿 2020-09-13
lyjava 2020-09-11
彤庆的技术 2020-09-02
锅哥 2020-08-27
ruanhongbiao 2020-08-16
zouph000 2020-08-03
Java编程语言学习 2020-07-29