【发布时间】:2021-05-17 21:24:22
【问题描述】:
我想知道是否可以在 TypeScript 中使用 property decorator 作为 type guard 以确保该属性是不 null |未定义。
假设有以下示例。
class MyClass {
@isRequired()
public myProperty: string | undefined;
}
请注意,由于严格的编译器设置 (strictNullChecks),必须编写string | undefined。因此,仅使用 string 作为类型是不可能的。我知道 non-null-assertion 可以这样使用:public myProperty!: string。但这实际上是装饰者应该注意的。
最后,装饰器基本上检查属性是否设置在特定时间点,如果没有则抛出错误。这种检查显然不是在构建时进行的,否则就不需要这种方法。它在不久之后执行 - 例如在 Angular 等框架的 lifecylce 钩子 中。我知道类型检查在 constructor 本身内是不正确的。不过我可以接受。如果检查成功,则属性的类型应缩小到string,因此您可以安全地使用它,例如this.property.split(" ").
我想知道这样的事情在理论上是否可行?提前致谢。
【问题讨论】:
-
我实际上知道这篇文章 - 谢谢,但我不认为它缩小了类型。这就是我想解决的问题。
标签: typescript decorator typescript-decorator angular-decorator