我有一个与行动的属性接口,根据行动的类型,我想有可选的属性添加到接口。下面是当前界面
const FIGHT = `fight`;
const SWIM = `swim`;
const DANCE = `dance`;
type ActionType =
| typeof FIGHT
| typeof SWIM
| typeof DANCE
interface Creator {
actionType: ActionType;
typeId: string;
}
如果actionType接收SWIM类型的值,那么我们需要向Creator接口添加一个附加属性,如
interface Creator {
actionType: ActionType;
typeId: string;
trained?: string;
}
我的尝试,Creator
。
interface CreatorBase {
actionType: ActionType;
typeId: string;
}
interface CreatorSwim extends CreatorBase {
actionType: typeof SWIM;
trained?: string;
}
export type Creator =
| CreatorBase
| CreatoeSwim
我得到错误TS2339:如果我尝试访问类型为Creator的对象的swim
属性,则类型“Creator”上不存在属性“trained”。
3条答案
按热度按时间4ktjp1zp1#
这就是诀窍:
Playground
x8goxv8g2#
所以在这种情况下,我会想象条件类型是你的救星。你可以检查你的动作类型是否真的是“游泳”,如果是的话,你可以在你想要添加的按键上进行Map。
请看下面的代码片段:
w6mmgewl3#