我想从扩展'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的任何特定属性时,您会得到一个错误,因为boolean
或string[]
都不能接受boolean | string
类型的值
你能做的是:
const theme:Theme = defaultTheme;
let themeMeta:ThemeMeta = defaultThemeMeta;
let key: keyof ThemeMeta;
for(key in defaultThemeMeta) {
themeMeta = {
...themeMeta,
[key]: theme[key]
}
}