如何在 Typescript 中使用带有 Object.assign 的 stringPropertyInitialization
How to use stringPropertyInitialization with Object.assign in Typescript
我有一个class喜欢
export class Config{
public doSomething: boolean;
public doSomethingOptionally?: boolean
constructor(data: {
doSomething: boolean,
doSomethingOptionally?: boolean
}) {
Object.assign(this, data);
}
}
以这种方式将数据传递给构造函数非常简单,而且 IntelliSense 足够智能,不允许开发人员在不指定 doSomething
属性 的情况下创建 Config
class 的新实例,但它没有 doSomethingOptionally
.
所有这一切都很好,但是一旦我在 tsconfig.json
中启用 strictPropertyInitialization
,我就会收到一堆错误,因为 doSomething
没有被初始化。
最好的解决方法是什么?
我不想:
- 指定默认值(对象可以非常大)
- 使用
doSomething: boolean = {} as any;
- 在
data
之外的构造函数中赋值 属性 因为可能有很多参数并且调用构造函数对我来说太难看了
- 使
doSomething
接受未定义的值
一个解决方案是让编译器知道通过 Object.assign
使用 definite assignment assertion
初始化了哪些属性
export class Config{
public doSomething!: boolean;
public doSomethingOptionally?: boolean
constructor(data: {
doSomething: boolean,
doSomethingOptionally?: boolean
}) {
Object.assign(this, data);
}
}
我有一个class喜欢
export class Config{
public doSomething: boolean;
public doSomethingOptionally?: boolean
constructor(data: {
doSomething: boolean,
doSomethingOptionally?: boolean
}) {
Object.assign(this, data);
}
}
以这种方式将数据传递给构造函数非常简单,而且 IntelliSense 足够智能,不允许开发人员在不指定 doSomething
属性 的情况下创建 Config
class 的新实例,但它没有 doSomethingOptionally
.
所有这一切都很好,但是一旦我在 tsconfig.json
中启用 strictPropertyInitialization
,我就会收到一堆错误,因为 doSomething
没有被初始化。
最好的解决方法是什么?
我不想:
- 指定默认值(对象可以非常大)
- 使用
doSomething: boolean = {} as any;
- 在
data
之外的构造函数中赋值 属性 因为可能有很多参数并且调用构造函数对我来说太难看了 - 使
doSomething
接受未定义的值
一个解决方案是让编译器知道通过 Object.assign
使用 definite assignment assertion
export class Config{
public doSomething!: boolean;
public doSomethingOptionally?: boolean
constructor(data: {
doSomething: boolean,
doSomethingOptionally?: boolean
}) {
Object.assign(this, data);
}
}