我也在使用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仅发现实际问题?
答案 0 :(得分:1)
我认为Basarat撰写的这本精彩的打字稿书这一章可能比我更能回答您的问题。很短,只有100%的时间点
https://basarat.gitbook.io/typescript/main-1/lazyobjectliteralinitialization
答案 1 :(得分:0)
打字稿应该如何知道真正的问题在哪里,以及您知道哪个问题?实际上,它实际上是相反的,您可以告诉打字稿它不应该保护您的位置:
mycar = {} as any;
或者您也可以使用编译器并正确键入变量:
let mycar: { color: number, /*...*/ };