有一个类构造函数
type Params = { social?: Social; seo?: SEO };
class Class {
public seo?: SEO;
public social?: Social;
constructor(params: ParamsCreating) {
const { title, content, dateTime, id, ...extra } = params;
if (extra) {
Object.keys(extra).forEach((key: keyof Params) => {
this[key] = extra[key];
^----
});
}
}
}
编译器输出以下错误:
TS2322:类型“社交 | SEO' 不可分配给类型 'Social & SEO'。“社交”类型不能分配给“社交和 SEO”类型。“社交”类型中缺少属性“标签”,但在“SEO”类型中是必需的。
如果我像这样手动重写它:
type Params = { social?: Social; seo?: SEO };
class Class {
public seo?: SEO;
public social?: Social;
constructor(params: ParamsCreating) {
const { title, content, dateTime, id, ...extra } = params;
if (extra) {
Object.keys(extra).forEach((key: 'seo' & 'social') => {
this[key] = extra[key];
});
}
}
}
顺利通过,没有错误。
如何重写此代码以用key: 'seo' & 'social'
更灵活的方式替换构造?