联合类型作为界面中的键?

时间:2019-03-06 12:53:54

标签: typescript

是否可以在接口中使用联合类型作为键?例如,我想做这样的事情:

interface IMargin {
  [key in 'foo' | 'bar']: boolean;
}

但是我遇到了这个错误:

  

接口中的计算属性名称必须引用其类型为文字类型或“唯一符号”类型的表达式。ts(1169)

有什么办法解决吗?

用例将值数组转换为接口:

const possibleTypes = ['foo', 'bar'];
interface Types {
    foo?: boolean;
    bar?: boolean;
}

4 个答案:

答案 0 :(得分:2)

这不一定是一个答案,但我认为这可能会让其他人感兴趣。

您可以使用联合类型作为接口子属性中的键

export type Language = 'EN' | 'DE' | 'IT';

export interface Document {
  generic: string;
  languages: {
    [key in Language]: string[];
  }
}

答案 1 :(得分:1)

您可以使用对象类型代替接口,而接口通常是可以互换的:

batchfile.bat y

答案 2 :(得分:0)

接口不支持映射类型(这是您在此处寻求的)。您可以使用类型别名,对于大多数用途,它应该具有相同的功能(并非在所有情况下都可以使用)(如果知道类型,则可以像执行接口一样实现类型别名)。

Review.includes(:check_in).where(check_ins: Date.today..)

映射类型const possibleTypes = (<T extends string[]>(...o: T) => o)('foo', 'bar'); type Types = Record<typeof possibleTypes[number], boolean> 应该在这里起作用

答案 3 :(得分:0)

可以将 union 映射为 Type 而不是 Interface 作为选项。

type Language = "EN" | "DE";

type Types<T> = {
  [K in Strings]?: boolean
}