将枚举映射到类型

时间:2018-02-21 20:23:17

标签: typescript mapped-types

我试图在枚举上使用mapped type

export enum CurrencyType {
  USD = "USD",
  AUD = "AUD",
  GBP = "GBP",
  CAD = "CAD"
}

实现这种类型:

type Rates = {
  AUD: number;
  CAD: number;
  GBP: number;
  USD: number;
}

我以为我可以这样做:

type Rates = {
  [P in keyof CurrencyType]: number;
};

但这导致了这一点:

type Rates = {
    toString: number;
    charAt: number;
    charCodeAt: number;
    concat: number;
    indexOf: number;
    lastIndexOf: number;
    localeCompare: number;
    match: number;
    replace: number;
    //...
}

我尝试使用union literals代替enum

export type CurrencyType = "USD" | "AUD" | "GBP" | "CAD";` 

但它给出了相同的结果。

我唯一可以开始工作的是:

type Rates = {
  [P in typeof CurrencyType.AUD | CurrencyType.USD | CurrencyType.GBP | CurrencyType.CAD]: number;
};
但是很明显,这会打败整个目的!

有没有这样做?

1 个答案:

答案 0 :(得分:5)

哇,它就在我面前。和往常一样,我过度复杂,没有彻底阅读文档。

type Rate = {
  [P in CurrencyType]: number;
};

如果有人帮助别人,我会把它留下来

相关问题