我有
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'类型的参数。 有人知道吗?
答案 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);
}