Javascript 类型';X';不能用作索引类型

Javascript 类型';X';不能用作索引类型,javascript,typescript,Javascript,Typescript,我收到typescript中的错误: 消息:“类型“TransitionStyles”不能用作索引类型。” 我想知道是否可以更改我的界面,以便也可以使用它和索引类型: export interface TransitionStyles { entering: Object entered: Object exiting: Object exited: Object [key: string]: Object } 或者我被迫使用不同的界面,如: 导出类型转换状态='enter

我收到typescript中的错误:

消息:“类型“TransitionStyles”不能用作索引类型。”

我想知道是否可以更改我的界面,以便也可以使用它和
索引类型

export interface TransitionStyles {
  entering: Object
  entered: Object
  exiting: Object
  exited: Object
  [key: string]: Object
}
或者我被迫使用不同的界面,如:

导出类型转换状态='entering'|'entered'|'exiting'|'exited'

我想你想要的是类似

export interface TransitionStyles {
  entering: object;
  entered: object;
  exiting: object;
  exited: object;
}

export type TransitionState = keyof TransitionStyles;

export type PromisifiedTransitionStyles = {
  [P in TransitionState]: Promise<TransitionStyles[P]>
};
导出接口转换样式{
输入:对象;
输入:对象;
退出:对象;
退出:对象;
}
导出类型TransitionState=keyof TransitionStyles;
导出类型PromisifiedTransitionStyles={
[P处于过渡状态]:承诺
};

请注意,如果我们重新引入
string
索引签名,
[key:string]:TransitionState
,则键类型
TransitionState
,将折叠为仅
string
,因为在类型
string |“literal”中
更一般的类型包含工会更具体的组成部分。

使用
keyof
。另外,不要使用
对象
类型。使用
对象
{}
,具体取决于您的意思。我尝试过[key:TransitionState],但不起作用,请您提供一个示例,您必须使用
类型T={[P in TransitionState]}
。它目前不适用于接口。你能写一个完整的例子吗?