使用严格模式,但有例外

时间:2018-03-20 09:28:50

标签: typescript

我想使用编译器严格模式("strict": true),但后来我的模型出现错误,如下所示:

@Entity
class MyModel {
    @Column()
    public name: string;

    @Column()
    public email: string;

    ...
}

我得到的错误是:

  

属性'name'没有初始化程序,并且未明确分配   构造函数。

在创建模型实例时,ORM会分配这些值,因此确实填充了所有字段。
问题是如何让编译器知道这一点? 这些是我所知道的选项:

  1. 不要使用严格模式:不是真正的选择,我想拥有它
  2. 将属性标记为可选(即:public name?: string):我想避免的东西,因为值总是在那里,然后我总是需要使用非空断言运算符来避免键入string | undefined(因为我使用的是严格模式)。
  3. strictPropertyInitializationstrict结合使用:我所知道的最佳选择,但这也不够好,因为它会影响我的代码库中的所有类,而不仅仅是模型。
  4. 有没有更好的方式我不知道?
    也许我可以放宽对特定图书馆或其他东西的限制? 我还想过将模型放在一个不同的项目(不同的tsconfig.json)中,这个项目更放松,然后在主项目中使用已编译的.js / .d.ts,但感觉就像一个矫枉过正。

1 个答案:

答案 0 :(得分:1)

您可以使用definite assignment assertion !,告诉编译器有人会初始化字段,并且应该将它们视为在构造函数中初始化。这将抑制有关初始化的任何错误。

@Entity
class MyModel {
    @Column()
    public name!: string;

    @Column()
    public email!: string;

    ...
}