Javascript 在TypeScript中进行对象分解结构时重命名剩余属性变量
编辑: 我在github上发布了一个与此相关的问题:Javascript 在TypeScript中进行对象分解结构时重命名剩余属性变量,javascript,typescript,destructuring,Javascript,Typescript,Destructuring,编辑: 我在github上发布了一个与此相关的问题: 似乎{…other:xother}不是有效的JS,也不是TS,代码,甚至不应该编译 原始问题: 让我们假设以下示例: const values = { a: "1", b: "2", c: "3", d: "4" }; const { a: va, b: vb, ...other } = values; 其中为属性a分配了新变量名va 根据TypeScript规范,对其余属性执行相同操作是否有效?比如: const { a: va, b:
似乎
{…other:xother}
不是有效的JS,也不是TS,代码,甚至不应该编译
原始问题:
让我们假设以下示例:
const values = { a: "1", b: "2", c: "3", d: "4" };
const { a: va, b: vb, ...other } = values;
其中为属性a
分配了新变量名va
根据TypeScript规范,对其余属性执行相同操作是否有效?比如:
const { a: va, b: vb, ...other: vother } = values;
我知道它有效,我已经测试过了()。但我找不到它的定义
引用属性重命名的文档示例始终显示“正常”情况:。规范语法引用了规范中未描述(或我遗漏)的绑定模式
我的第一印象是它不是很有用,因为…other
已经是一个自定义变量名。但它是有效的。我很想知道它的具体定义在哪里,或者它是否只是一个角落的案例(我想不是)。您提到的手册链接涵盖了您在示例中遇到的大多数场景,但我认为它所涵盖的一种情况没有明确涵盖(只是含蓄地)
您所指的特定功能(我认为)是以下各项的组合:
您可以使用以下语法为对象中的其余项创建变量:…
:
及
您还可以为属性指定不同的名称:
本手册没有给出两者都使用的示例,如下所示。这种组合使用的有趣之处在于,…other
标记实际上并不意味着什么,而且永远不会被引用(或可引用)。在下面示例的“工作”版本中,如果没有错误行,other
标记根本不会出现在输出中
以下是缩短的示例:
const values = { a: "1", b: "2", c: "3", d: "4" };
const { a: one, ...other: twoThreeFour } = values;
console.log(other); // ERROR there is no variable 'other'
console.log(a, twoThreeFour); // OK
而没有错误的版本-传输的JavaScript在代码中的任何地方都没有引用other
:
const values = { a: "1", b: "2", c: "3", d: "4" };
const { a: one, ...other: twoThreeFour } = values;
console.log(a, twoThreeFour); // OK
底层语言规范中存在一个错误。您指的是Rest/Spread属性,它还不是ECMAScript的正式部分,但仍然只是一个()。