我现在正在阅读很多关于TypeScript文档的内容,并注意到一些作者会说上下文类型,而另一些作者会说类型推断。有些人会以同样的方式提及它们(似乎它们只是与术语的选择不一致(。一旦我确定它们是一回事,我就会读到一些给人以它们不是的印象的东西。
在这一点上,几乎感觉有些作者自己不确定。我知道的一件事是我不确定。有人可以澄清一下吗?
上下文类型是类型推断的子集。请参阅文档中的上下文类型:
上下文类型
在某些情况下,类型推断在 TypeScript 中也以"另一个方向"工作。这称为"上下文类型"。当表达式的位置隐含表达式的类型时,将发生上下文类型。例如:
window.onmousedown = function(mouseEvent) { console.log(mouseEvent.button); //<- OK console.log(mouseEvent.kangaroo); //<- Error! };
在这里,Typescript 类型检查器使用
Window.onmousedown
函数的类型来推断赋值右侧的函数表达式的类型。当它这样做时,它能够推断mouseEvent
参数的类型,该参数确实包含button
属性,但不包含kangaroo
属性。
因此,上下文类型不是通过分配给变量的内容来推断变量的类型,而是通过变量的位置来推断变量的类型。
整个页面可能值得一读。