如何在TypeScript上没有值的情况下遍历枚举?

时间:2019-07-03 22:15:52

标签: typescript enums

我有

enum EthereumNetwork {
  MAIN_NET,
  ROPSTEN,
  KOVAN
}

class EthereumHDWallet {
  constructor(network: EthereumNetwork) { }
}

任务是编写遍及所有可能网络的测试,并尝试创建EthereumHDWallet。像这样:

  for (const network in EthereumNetwork) {
      const wallet = new EthereumHDWallet(network);
      it('constructor', () => {
        expect(wallet).toBeDefined();
      });
  }

不幸的是,由于错误TS2345,以上代码无法正常工作:类型'string'的参数不能分配给'EthereumNetwork'类型的参数。 有人知道吗?

1 个答案:

答案 0 :(得分:1)

遍历所有 键会给您太多(它也会为您提供键"0", "1", "2")。您可以过滤 并获取所需的类型安全性,但是必须告诉TypeScript这是安全的(使用下面as K[]中的enumKeys):

function enumKeys<O extends object, K extends keyof O = keyof O>(obj: O): K[] {
  return Object.keys(obj).filter(k => Number.isNaN(+k)) as K[];
}

for (const networkName of enumKeys(EthereumNetwork)) {
  const network = EthereumNetwork[networkName];
  const wallet = new EthereumHDWallet(network);
}