这有一个错误:
interface TypeA {
prop1: string
}
interface TypeB extends TypeA {
prop2: string
}
const ArrA: TypeA[] = [{ prop1: "foo" }]
const ArrB: TypeB[] = ArrA.map(a => {
a.prop2 = "bar"
return a
})
这会出错:[ts] Property 'prop2' does not exist on type 'TypeA'.
我希望在我的界面定义(like in this Stackoverflow question from 5 years ago)中不使用any
的情况下执行此操作。我在Stackoverflow上找不到任何其他解决方案,所以我在这里提出这个问题。
答案 0 :(得分:1)
这个怎么样:
const ArrB: TypeB[] = ArrA.map(a => {
return {
...a,
prop2: "bar"
}
})
答案 1 :(得分:0)
我需要使用as
关键字进行投射,并在prop2
上添加TypeA
作为可选参数:
interface TypeA {
prop1: string;
prop2?: string;
}
interface TypeB extends TypeA {
prop2: string;
}
const ArrA: TypeA[] = [{ prop1: "foo" }];
const ArrB: TypeB[] = ArrA.map(a => {
a.prop2 = "bar";
return a as TypeB;
});
这是我能找到的最好的解决方案,会欣赏更多惯用的解决方案,1)不涉及修改TypeA,2)不涉及使用any
。谢谢。