使用字符串键和数字键在打字稿中重载索引器

时间:2019-03-02 17:18:34

标签: typescript

我正尝试在一些旧代码中添加一些类型。

有一个transitionData对象,该对象可能是按索引添加的对象,如下所示:

this.transitionData[id] = transition

其中idnumber,而transitionTransition类型。

或者可能是:

transitions[t].timer.stop()

t是字符串,而timerTimer类型。

我想要这个界面:

export interface TransitionData {
  [index: number]: Transition
  [key: string]: {timer: Timer}
}

但打字稿抱怨:

  

数字索引类型'Transition'不能分配给字符串索引类型'{timer:Timer; }

1 个答案:

答案 0 :(得分:1)

创建两个索引签名并将它们合并在一起。

interface TransitionMap {
    [index: number]: Transition
}

interface TimerMap {
    [index: string]: { timer: Timer }
}

declare const transitionData: TransitionMap & TimerMap;

TypeScript会了解到哪里。

transitionData["1"] // Timer
transitionData[1]   // Transition