【发布时间】:2017-09-10 00:10:00
【问题描述】:
是否可以更改在接口中声明的属性的类型?我不知道如何用语言来解释这一点,所以这里有一个简化的例子,说明我正在尝试做的事情不起作用:
假设Movie 命名空间是在我无法控制的第 3 方库中定义的:
declare namespace Movie {
interface Character {
doSomething(): Promise<void>;
friend: Character;
}
}
现在在我的应用程序中,我希望我的角色是 Super,有 Super 朋友。所以我尝试在自己的打字中做到这一点:
declare namespace Movie {
interface Character {
doAnExtraThing(): Promise<void>; // OK to add a new method
nickname: string; // OK to add a new property
friend: SuperCharacter; // NOT OK to override type with a subtype
}
interface SuperCharacter extends Character {
doSomethingSuper(): Promise<void>;
}
}
但这不起作用,因为 TypeScript 不允许我用 SuperCharacter 覆盖 friend 属性类型,即使根据定义 SuperCharacter 是 一个Character。 TypeScript 报错:
[ts] Subsequent variable declarations must have the same type. Variable
'friend' must be of type 'Character', but here has type 'SuperCharacter'.
我希望通过让SuperCharacter 扩展原来的Character 接口我不会遇到这个问题,但我确实遇到了。
希望很清楚我想要达到的目标。有办法吗?
【问题讨论】:
标签: typescript types typescript-typings