TypeScript 复制对象的属性以创建新对象



我想从扩展'B'的'a'类型的对象创建一个'B'类型的新对象。我试图从类型为"A"的对象中复制类型为"B"的属性,这给了我一个错误。

你能帮我解决这个错误吗?或者解释一下我做错了什么。这是我的代码示例:

interface ThemeMeta {
available: boolean;
tags: string[];
}
const defaultThemeMeta: ThemeMeta = {
available: false,
tags: []
};
interface Theme extends ThemeMeta {
name: string;
domainName: string;
lastUpdate: number;
published: boolean;
developer: boolean;
pinned: boolean;
id: number;
}
const defaultTheme:Theme = {
name: 'Default theme name',
domainName: '',
lastUpdate: 0,
published: false,
developer: false,
pinned: false,
id: 0,
available: false,
tags:[]
};
const theme:Theme = defaultTheme,
themeMeta:ThemeMeta = defaultThemeMeta;
let key: keyof ThemeMeta;
for(key in defaultThemeMeta) {
themeMeta[key] = theme[key];
}

游乐场链接

当前类型的key如果是keyof ThemeMeta,这意味着theme[key]可以是ThemeMeta值的任何可用类型。在我们的情况下是CCD_ 5或CCD_。所以keyof ThemeMeta[keyof ThemeMeta]的类型是boolean | string

当您将它应用于themeMeta的任何特定属性时,您会得到一个错误,因为booleanstring[]都不能接受boolean | string类型的值

你能做的是:

const theme:Theme = defaultTheme;
let themeMeta:ThemeMeta = defaultThemeMeta;
let key: keyof ThemeMeta;
for(key in defaultThemeMeta) {
themeMeta = {
...themeMeta,
[key]: theme[key]
}
}

相关内容

  • 没有找到相关文章

最新更新