将枚举映射到类型

NSj*_*nas 1 typescript mapped-types

我试图在枚举上使用映射类型

export enum CurrencyType {
  USD = "USD",
  AUD = "AUD",
  GBP = "GBP",
  CAD = "CAD"
}
Run Code Online (Sandbox Code Playgroud)

实现这种类型:

type Rates = {
  AUD: number;
  CAD: number;
  GBP: number;
  USD: number;
}
Run Code Online (Sandbox Code Playgroud)

我以为我可以做这样的事情:

type Rates = {
  [P in keyof CurrencyType]: number;
};
Run Code Online (Sandbox Code Playgroud)

但是结果是这样的:

type Rates = {
    toString: number;
    charAt: number;
    charCodeAt: number;
    concat: number;
    indexOf: number;
    lastIndexOf: number;
    localeCompare: number;
    match: number;
    replace: number;
    //...
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用union literals替代enum

export type CurrencyType = "USD" | "AUD" | "GBP" | "CAD";` 
Run Code Online (Sandbox Code Playgroud)

但结果相同。

我唯一可以开始工作的就是这样做:

type Rates = {
  [P in typeof CurrencyType.AUD | CurrencyType.USD | CurrencyType.GBP | CurrencyType.CAD]: number;
};
Run Code Online (Sandbox Code Playgroud)

但这显然不能达到目的!

反正有这样做吗?

NSj*_*nas 5

哇,它就在我面前。和往常一样,我过于繁琐,没有彻底阅读文档。

type Rate = {
  [P in CurrencyType]: number;
};
Run Code Online (Sandbox Code Playgroud)

如果有其他人帮忙,我会保留

  • 感谢您留下来帮助陌生人:-) (2认同)