TypeScript中能否省略键名传递符合接口定义的对象?
TypeScript中能否省略接口对象键名以
{ ['John'], 11 }形式创建? 不行,TypeScript(以及它基于的JavaScript)完全不支持这种省略键名的对象字面量写法。
原因说明
JavaScript对象字面量的核心语法要求必须明确写出「键: 值」的配对结构,{ ['John'], 11 }这种写法不符合标准语法规范,不管在JS还是TS环境里都会直接触发语法错误。
替代简化方案
如果你想减少代码冗余,可以试试这些方式:
- 数组解构转换:先把数据存到数组里,再映射为符合接口的对象
const rawData = ['John', 11]; const aObj: A = { names: [rawData[0]], nr: rawData[1] }; - 封装工具函数:写一个专用函数来生成符合
A接口的对象,调用时只需传值interface A { names: string[]; nr: number; } function makeA(name: string, nr: number): A { return { names: [name], nr }; } // 使用时直接传参: const aObj = makeA('John', 11); - 数组转对象的通用函数:如果是固定顺序的数组输入,可以写一个转换函数
function arrayToA(arr: [string, number]): A { return { names: [arr[0]], nr: arr[1] }; } // 使用: const aObj = arrayToA(['John', 11]);
TypeScript作为JavaScript的超集,不会修改JS的基础语法规则,所以JS不支持的语法糖,TS也不会额外提供。
内容的提问来源于stack exchange,提问作者paul321
相关产品推荐
相关产品推荐

