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

问题描述 投票:0回答:2

编辑:

我在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;

其中为属性

va
分配了新变量名称
a

根据 TypeScript 规范,对其余属性执行相同操作是否有效

...other
?比如:

const { a: va, b: vb, ...other: vother } = values;

我知道它有效,我已经测试过它(在线测试)。但我无法找到它的定义位置。

涉及属性重命名的文档示例始终显示“正常”情况:TypeScript 手册 - 变量声明。规范语法引用了规范中未描述(或我错过了)的

BindingPattern
TypeScript Spec

我的第一印象是它不是很有用,因为

...other
已经是一个自定义变量名称。但它有效。我很想知道它是在哪里具体定义的,或者它是否只是一个有效的极端情况(我想不是)。

javascript typescript destructuring
2个回答
14
投票

您提到的手册链接涵盖了示例中“解构”下的大部分场景,但我认为它所涵盖的一种情况并未明确涵盖(仅隐式涵盖)。 您所指的特定功能(我认为)是以下功能的组合:

您可以使用语法
...

:

 为对象中的其余项目创建变量

您还可以为属性指定不同的名称:

手册没有给出两者使用的示例,如下所示。这种组合使用的有趣之处在于,
...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

底层语言规范中存在一个
问题,旨在提高与解构相关的剩余元素使用的清晰度


0
投票
other

之外的任何其他名称。例如:

const {...rest} = someVaribale;
const {...myname} = otherVariable;

© www.soinside.com 2019 - 2024. All rights reserved.