【问题标题】:Using 'true' as a type in typescript [duplicate]在打字稿中使用“true”作为类型[重复]
【发布时间】:2018-10-04 18:43:01
【问题描述】:

今天我在 Typescript 中发现了一个奇怪的行为。

我有一个类定义为:

class MyClass {
  myMember: true;
}

编译和 tslinted 没有任何错误。该成员在 typescript 代码中根本没有使用,但我在 Angular 中指的是它。

你可以想象我想做的是:

class MyClass {
  myMember = true;
}

很明显,Angular 没有看到设置为该属性的值。

但我的问题是为什么要编译? “真实”是否被理解为一种类型?我是否在 tsconfig.json 中遗漏了一些会使该行出错的内容?

只是想知道我是否可以定义任何东西来捕获类似的错误,并尝试理解使该代码成为可编译代码背后的逻辑。

【问题讨论】:

  • 感谢@MuratK。没找到那个问题,但和我的一模一样。

标签: typescript


【解决方案1】:

我是否在我的 tsconfig.json 中遗漏了一些东西,这会使该行引发错误?

是的,你是。您可以设置额外的编译器选项来获得这种效果。

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

这将引发错误:

属性“myMember”没有初始化器,也没有在构造函数中明确分配。

考虑添加其他compiler options

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

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

【讨论】:

  • 不要认为这正是答案。如果我继续将其定义为“true”类型,但在构造函数中将其分配为 true,它将编译。
  • @Juan 我的回答仅针对您给出的第一个示例,该示例希望出现编译器错误。第二种情况是绝对有效的。如果您对为什么它是有效的感兴趣,您可以阅读标记为重复的问题的答案。
猜你喜欢
  • 2017-06-09
  • 2021-08-31
  • 1970-01-01
  • 2020-01-17
  • 2019-07-09
  • 2021-06-24
  • 1970-01-01
  • 2017-08-12
  • 2020-07-17
相关资源
最近更新 更多