我想使用编译器严格模式("strict": true
),但后来我的模型出现错误,如下所示:
@Entity
class MyModel {
@Column()
public name: string;
@Column()
public email: string;
...
}
我得到的错误是:
属性'name'没有初始化程序,并且未明确分配 构造函数。
在创建模型实例时,ORM会分配这些值,因此确实填充了所有字段。
问题是如何让编译器知道这一点?
这些是我所知道的选项:
public name?: string
):我想避免的东西,因为值总是在那里,然后我总是需要使用非空断言运算符来避免键入string | undefined
(因为我使用的是严格模式)。strictPropertyInitialization
与strict
结合使用:我所知道的最佳选择,但这也不够好,因为它会影响我的代码库中的所有类,而不仅仅是模型。 有没有更好的方式我不知道?
也许我可以放宽对特定图书馆或其他东西的限制?
我还想过将模型放在一个不同的项目(不同的tsconfig.json
)中,这个项目更放松,然后在主项目中使用已编译的.js
/ .d.ts
,但感觉就像一个矫枉过正。
答案 0 :(得分:1)
您可以使用definite assignment assertion !
,告诉编译器有人会初始化字段,并且应该将它们视为在构造函数中初始化。这将抑制有关初始化的任何错误。
@Entity
class MyModel {
@Column()
public name!: string;
@Column()
public email!: string;
...
}