class Item { a!: boolean; b!: string; c!: string; d?: string; constructor(item: Item,type: string) { Object.assign(this, item); } }
上記classからtypeによって型宣言を変更したいです。
例えば、typeがtype1ならa,bだけ宣言できてtype2ならc,dだけ型宣言できるように強制したいです。
コードでは以下のようになるイメージです。
const hoge = {}; const item = Item.new(hoge, { type: 'type1'}); //a,bが宣言されてないよとエラーを出す const item2 = Item.new(hoge, { type: 'type2'}); //c,dが宣言されてないよとエラーを出す
このようなことは可能でしょうか。関連するキーワードがありましたらご教示いただけたら幸いです。
class でなくても良いなら、いわゆる tagged union がおすすめです。
https://typescript-jp.gitbook.io/deep-dive/type-system/discriminated-unions