javascript - 在 TypeScript 中清理类构造函数的一种方法?
目前我正在以以下方式定义我的类构造函数
class MyClass {
routerStore: RouterStore
characterStore: CharacterStore
characterPrivateStore: CharacterPrivateStore
constructor(
routerStore: RouterStore,
characterStore: CharacterStore,
characterPrivateStore: CharacterPrivateStore
) {
super()
this.routerStore = routerStore
this.characterStore = characterStore
this.characterPrivateStore = characterPrivateStore
}
}
我觉得这有些冗长和重复。鉴于 TypeScript 利用了一些最新的 JavaScript 提案,我想问是否有可能以某种方式简化它?
答案#1
你可以为构造函数参数添加访问修饰符。这将使该参数也成为类的字段,并使用该参数的值进行初始化。
class MyClass {
constructor(
public routerStore: RouterStore,
public characterStore: CharacterStore,
public characterPrivateStore: CharacterPrivateStore
) {
super()
}
}
你也可以使用 Object.assign 在类上声明字段,并使用映射类型仅提取字段键(排除方法):
type JustFieldKeys<T> = { [P in keyof T] : T[P] extends Function ? never : P }[keyof T]
class MyClass {
public routerStore!: RouterStore,
public characterStore!: CharacterStore,
public characterPrivateStore!: CharacterPrivateStore
constructor(params: Pick<MyClass, JustFieldKeys<MyClass>>) {
Object.assign(this, params);
}
}
new MyClass({
characterPrivateStore: null,
characterStore: null,
routerStore: null
})
