打字稿:花括号作为函数参数

时间:2019-05-02 10:33:01

标签: angular typescript

我在检查Alfresco ADF的content metadata component时偶然发现了以下打字稿功能,我无法理解:

private saveNode({ changed: nodeBody }): Observable<Node> {
  return this.nodesApiService.updateNode(this.node.id, nodeBody);
}

我不了解的是{ changed: nodeBody }

根据thisthis的答案,花括号用于表示对象文字,作为将键/值对用作函数参数的一种方式。但是这里将其用作参数。如果这创建了一个对象,以我的理解,这将意味着changed是其属性的名称,而nodeBody是指属性值。但是该对象分配给哪个变量,以及如何在方法主体中引用它?

更让我困惑的是,return语句中仅使用nodeBody。那么为什么不立即将其用作单个参数呢?

这种输入形式的好处或用例是什么?

1 个答案:

答案 0 :(得分:1)

您的理解是正确的。

我认为,使用该方法有两个主要好处,第一个是通过指定函数只能接受具有特定形状的参数而获得的明显的类型安全性。

function f({ a: b }) {
  return b;
}

f({a: 1}) // -> 1
f({c: 1}) // type error

第二件事就是不必在函数的主体中显式键入a.b(在您的情况下为changed.nodeBody)的便利。在您的示例中,您仅在return语句中使用nodeBody一次,但是您可以轻松地想象出多次使用该值的情况。

  

但是此对象分配给哪个变量,以及如何引用   在方法主体中?

在您的示例中,您可以在函数的主体中单独使用nodeBody来引用参数对象的changed键的值。