如果我运行" typescript --strictNullChecks"在下面的代码中,我没有错误。如果我在它上面运行流程,它会给我一个关于null与number的类型不兼容的错误。为什么打字稿也没有错误呢?这是一个值得记录的功能还是一个问题?
operator==
答案 0 :(得分:9)
TypeScript不会进行网站分析。
TypeScript看到了这个,这没关系:
var f = function f( x: any ) {
var y = x * 2;
}
f(null);
Flow看到了:
var f = function f( x: ??? ) {
var y = x * 2;
}
f(null);
其中???
是通过查看当前文件中的调用来确定的。在这种情况下,x
的类型为null
,并且出错。
为什么TypeScript不会从呼叫网站推断出类型?通常,计算机可以通过这样做生成的错误消息是模糊的 - 你经常在Flow中看到的是你将错误的参数传递给函数,在 body 中得到错误正确实现的函数(或下游函数),然后必须向后工作以查看有问题的参数的来源。有时候这一点并不清楚 - 如果你的一半代码写了fileName
而你的一半代码写了filename
并且你传递了这些对象的混合,谁来说谁&# 39;不正确? TypeScript答案是"放置一个类型注释来解释你的意图"这样你就可以得到高特异性的错误。
因为这种分析比较昂贵,所以它并不适合整个程序分析。因此Flow仅在每个文件的基础上进行此推断,这意味着您通常希望在"边界"的每个函数上都有类型注释。文件及其与之交互的文件。而且由于这些界限是大多数错误的地方,因此它并不总是像乍一看那样买到你。