如何创建符合需求的TypeScript Map?语法问题求助
解决Map初始化的语法问题
你的问题出在没有正确实例化Map对象——fields.map()返回的是一个键值对数组,但你直接把它赋值给了Map类型的变量,TypeScript(以及原生JS)不会自动将数组转换为Map实例,这就导致了类型不匹配和运行错误。
正确的代码实现
只需要把map生成的数组传入Map的构造函数即可:
const fields = ['cashBalance', 'openTradeEquity', 'initialMargin', 'optionValue', 'treasuries', 'margin']; const total: Map<string, {sum: number}> = new Map(fields.map(f => [f, {sum: 0}]));
访问方式说明
需要注意的是,Map的取值不能直接用对象属性的语法(total['cashBalance']),而是要用get()方法:
// 获取cashBalance的sum值 const cashSum = total.get('cashBalance')?.sum;
如果你的业务场景确实需要像对象属性那样直接访问,可以考虑用普通对象代替Map,代码如下:
const total: Record<string, {sum: number}> = fields.reduce((acc, f) => { acc[f] = {sum: 0}; return acc; }, {} as Record<string, {sum: number}>); // 现在可以直接这样访问 console.log(total.cashBalance.sum);
内容的提问来源于stack exchange,提问作者Anand
相关产品推荐
相关产品推荐

