有没有一种方法可以放松TypeScript编译器警告TS2339?

时间:2020-07-06 21:53:57

标签: javascript typescript compiler-construction

我也在使用TypeScript编译器检查我的JavaScript代码。这样做的原因是要尽早发现可能的缺陷。 TypeScript编译器的编译器警告之一是TS2339。它检查类型是否定义了某个属性。由于这很容易在JavaScript中出错,因此这是有价值的编译器警告。例如,假设我具有以下类型:

mycar = {

  color: "green",

  topspeed: 180

};

我正在代码中的某个地方使用

c = mycar.colour;

我将收到一条警告,指出“颜色”不存在(典型)。如果我没有运行TypeScript编译器,这将不会引起注意。到目前为止一切顺利。

但是假设您具有以下JavaScript代码,这是使用JavaScript的一种常见处理方式:

mycar = {};

mycar.color = "green";

mycar.topspeed = 180;

如果您运行TypeScript编译器,则会得到

error TS2339: Property 'color' does not exist on type 'mycar'

严格来说,TypeScript编译器是正确的,但实际上什么都没有 在这里可能会出错。您可能会争论为什么我没有将代码编写为 第一个示例,但这在JavaScript中并不常见,而且在 实际上,这些数据结构要复杂得多, 情况下,后一种编码方式被认为更方便。

所以我的问题是:是否有可能放松TypeScript 编译器警告TS2339仅发现实际问题?

2 个答案:

答案 0 :(得分:1)

我认为Basarat撰写的这本精彩的打字稿书这一章可能比我更能回答您的问题。很短,只有100%的时间点

https://basarat.gitbook.io/typescript/main-1/lazyobjectliteralinitialization

答案 1 :(得分:0)

打字稿应该如何知道真正的问题在哪里,以及您知道哪个问题?实际上,它实际上是相反的,您可以告诉打字稿它不应该保护您的位置:

  mycar = {} as any;

或者您也可以使用编译器并正确键入变量:

  let mycar: { color: number, /*...*/ };