大致过程就是检查 b 上有没有和 a 相同的属性,如果有就赋值给 a.
interface A {
foo: string;
bar: number;
};
const a: A = {
foo: 'a',
bar: 1,
};
interface B extends Partial<A> {
[propName: string]: any;
}
const b: B = {
foo: 'b',
bar: 2,
c: 3,
};
for (const key of Object.keys(a)) {
if (b[key]) {
a[key] = b[key]; // 报错: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'A'.
}
}
for (const key of Object.keys(a)) {
const k = key as keyof typeof a;
if (b[k]) {
a[k] = b[k]; // 报错: Type 'string | number' is not assignable to type 'never'.
}
}
除了像下面这样给 A 加上 [propName: string] 之外还有别的解决办法吗?
interface A {
[propName: string]: string|number;
foo: string,
bar: number,
};
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.