Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在TypeScript中进行对象分解结构时重命名剩余属性变量_Javascript_Typescript_Destructuring - Fatal编程技术网

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

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:

编辑:

我在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: 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的正式部分,但仍然只是一个()。