繁体   English   中英

在TypeScript中进行对象解构时重命名剩余的属性变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM