你知道TS中类型是在哪里如何被推断的吗?

1,962 阅读2分钟

没有前言,我们直接单刀直入,一分钟看完!

我们知道TS中是有类型推论的,即在有些没有明确指出类型的地方,类型推论会帮助提供类型

例如

let a = 1;

上例中的变量a的类型被推断为数字

其实上,这种推断发生在初始化变量和成员,设置默认参数值和决定函数返回值时

上述是一个很简单的例子,当需要从几个表达式中推断类型时候,会使用这些表达式的类型来推断出一个最合适的通用类型,这叫最佳通用类型。例如:

let b = [0, null];

上例中,为了推断b变量的类型,我们必须考虑所有成员的类型。这里有数字和null。计算通用类型算法会考虑所有的候选类型,并给出一个兼容所有候选类型的类型

需要注意:如果没有找到最佳通用类型的话,类型推断的结果为联合数组类型

TypeScript类型推论也可能按照相反的方向进行。 这被叫做“按上下文归类”

按上下文归类会发生在表达式的类型与所处的位置相关时。比如:

window.onmousedown = function(mouseEvent) {
    console.log(mouseEvent.button);  //<- Error
};

TypeScript类型检查器使用Window.onmousedown函数的类型来推断右边函数表达式的类型。 因此,就能推断出 mouseEvent参数的类型了。 如果函数表达式不是在上下文类型的位置, mouseEvent参数的类型需要指定为any,这样也不会报错了。如下:

window.onmousedown = function(mouseEvent: any) {
    console.log(mouseEvent.button);  //<- Now, no error is given
};

上下文归类会在很多情况下使用到。 通常包含函数的参数,赋值表达式的右边,类型断言,对象成员和数组字面量和返回值语句

上下文类型也会做为最佳通用类型的候选类型

以上就是本文的所有内容,如有问题,欢迎指正~