interface base {
hello: string
[key:string]:any
}
interface baseAdd extends base{
world: string
}
function test(p: baseAdd) {
console.log(p);
}
let error: base = {hello:'hello'}
error.world = 'world'
test(error) // 报错
/* Argument of type 'base' is not assignable to parameter of type 'baseAdd'.
Property 'world' is missing in type 'base' but required in type 'baseAdd'.ts(2345)
a.ts(6, 3): 'world' is declared here.
我觉得可能是-----[key:string]:any
的原因,然后请问如何修改才能让ts在动态修改属性后匹配上新的interface?
除了test(error as baseAdd)
即使你这么操作了,
error
的类型也还是base
,因为它符合[key:string]:any
你这是要将一个父类变成更具体的子类,据我了解应该只能用断言
但是如果反过来,这样是可以的