![](/img/trans.png)
[英]TypeError when swapping object properties with destructuring assignment
[英]Renaming remaining properties variable when object destructuring in TypeScript
编辑:
我在github上打开了与此相关的问题: https : //github.com/Microsoft/TypeScript/issues/21265
似乎{ ...other: xother }
是无效的JS,TS,代码都不应该编译。
原始问题:
我们假设以下示例:
const values = { a: "1", b: "2", c: "3", d: "4" };
const { a: va, b: vb, ...other } = values;
其中为属性a
分配了新的变量名称va
。
根据TypeScript规范,对其余属性执行相同的操作是否有效...other
? 就像是:
const { a: va, b: vb, ...other: vother } = values;
我知道它有效,我已经测试过了( 在线测试 )。 但我无法找到它定义的位置。
引用属性重命名的文档示例始终显示“正常”情况: TypeScript Handbook - 变量声明 。 并且规范语法在规范: TypeScript Spec中没有描述(或者我已经错过)的BindingPattern
。
我的第一印象是它不是很有用,因为...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元素的使用的清晰度 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.