为什么我不能在界面中使用枚举作为键与其他键

mes*_*eeb 5 typescript

我通过其他问题发现了如何使其工作,但我找不到原因。

我有一个enum我想用作界面中的对象键:

export enum actions {
  insert = 'insert',
  merge = 'merge',
  assign = 'assign',
}
Run Code Online (Sandbox Code Playgroud)

我的这个配置界面的工作原理:

interface Config {
  calls: {
    reads: storeName[]
    writes: storeName[]
  } & {
    [action in actions]?: storeName[]
  }
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

interface Config {
  calls: {
    reads: storeName[]
    writes: storeName[]
    [action in actions]?: storeName[]
  }
}
Run Code Online (Sandbox Code Playgroud)

它给出错误:

类型文字中的计算属性名称必须引用类型为文字类型或“唯一符号”类型的表达式。ts(1170) 计算属性名称必须为“string”、“number”、“symbol”类型,或“任何”。

谁能帮助我理解为什么会发生这种情况。

kay*_*ya3 0

基本上:

  • { reads: storeName[], writes: storeName[] }是一个普通的接口类型
  • { [action in actions]?: storeName[] }映射类型

你不能写出两者兼而有之的东西;虽然你可以将其中一个相交。