使用';正确';作为typescript中的一种类型

使用';正确';作为typescript中的一种类型,typescript,Typescript,今天我在打字稿中发现了一个奇怪的行为 我将一个类定义为: class MyClass { myMember: true; } 编译和删除时没有任何错误。这个成员根本没有在typescript代码中使用,但我是在Angular中引用它的 你可以想象,我想做的是: class MyClass { myMember = true; } 很明显,Angular没有看到设置为该属性的值 但我的问题是为什么会这样?“真”被理解为一种类型吗?我是否在tsconfig.json中遗漏了一些会导致该行

今天我在打字稿中发现了一个奇怪的行为

我将一个类定义为:

class MyClass {
  myMember: true;
}
编译和删除时没有任何错误。这个成员根本没有在typescript代码中使用,但我是在Angular中引用它的

你可以想象,我想做的是:

class MyClass {
  myMember = true;
}
很明显,Angular没有看到设置为该属性的值

但我的问题是为什么会这样?“真”被理解为一种类型吗?我是否在tsconfig.json中遗漏了一些会导致该行抛出错误的内容

我只是想知道是否有什么可以定义来捕获类似的错误,并试图理解使之成为一段可编译代码背后的逻辑

我是否在tsconfig.json中遗漏了一些会导致该行抛出错误的内容

是的,你是。您可以设置其他编译器选项以获得此效果

在您的情况下,在tsconfig中将编译器选项
--strictPropertyInitialization
--strictNullChecks
设置为
true

这将引发错误:

属性“myMember”没有初始值设定项,并且未在构造函数中明确指定

还可以考虑添加其他

通过将同名的编译器选项
--strict
启用为true,可以启用所有
strict
类型检查选项


您还可以使用上的代码测试上述两个编译器选项。它有一个“选项”菜单,用于测试TypeScript中的一些可用编译器选项。

不要认为这正是答案。如果我一直将其定义为“true”类型,但在构造函数中将其赋值为true,则它将编译。@Juan我的回答仅针对您给出的第一个示例,您希望为其设置编译器错误。第二种情况绝对有效。如果你对它为什么有效感兴趣,你可以阅读标记为重复的问题的答案。谢谢@MuratK。我没发现那个问题,但它和我的完全一样。