为什么 VS 代码说我的对象 属性 有错误?

Why does VS code say there is an error with my object property?

我正在测试一些使用 TypeScript 中的对象的代码,并注意到我的 IDE 的 IntelliSense 为我尝试添加的新 属性 抛出错误。它声明 属性 “文本”不存在,这是我的代码:

// create new object
var thing : Object = new Object();

// Do things
thing.text = "This is a test.";
console.log(thing.text);


// dereference the object
thing = null;

错误在以下行突出显示:

thing.text = "This is a test.";
console.log(thing.text);

为什么在 JavaScript 中这是完全可以接受的代码和行为,但 VS 代码将其列为错误?这是我的编辑器的错误截图: Error

编辑:我应该注意到代码确实用 tsc 编译成有效的 JS 并且运行得很好,只是好奇为什么会出现错误,因为它在编写代码时让我失望并且让我觉得当那没有。它还在 tsc 的输出中注意到相同的错误,这种能够向对象添加和删除属性的语言行为是否从 JavaScript 更改为 TypeScript?

Typescript 类型不是您最终代码的一部分。当您 build/run 您的代码时,没有类型。在编程时,它们只是为了您的利益。所以你可以用不正确的类型编写有效的代码。 Typescript 会报错,但你的代码仍然 运行.

当您初始化变量时,您将其类型设置为 Object。这基本上是 {}。它没有任何属性。当您尝试为 thing.text 设置值时,它会给您一个错误,因为 thing 没有任何属性。

您有几个选择:

  1. text 初始化 thing:
const thing = { text: "This is a test." };
thing.text = "You can change the value if you want.";
console.log(thing.text);

注意,你不需要定义thing的类型。 Typescript 通过它的值知道它的类型。

  1. ,为thing声明一个类型,其中text是可选的:
type ThingType = {
  text?: string;
};

// or just: const thing: ThingType = {}
const thing: ThingType = new Object();
thing.text = "This is a test.";
console.log(thing.text);