奇怪的函数参数

时间:2016-09-05 07:06:27

标签: javascript typescript ecmascript-6

我发现这段代码并不完全明白。确切地说,我正在谈论那些函数参数:

function defaultPort({ port=123, user='test' }: Object = {}) {
}

我认为这是一种不同的解构,但显然不是。另外,我无法在Node中运行此代码,所以我猜它需要某种模块才能正确使用它。

有没有人见过这个?

2 个答案:

答案 0 :(得分:1)

如TJ所述,php7 A -- B -- M <-- retain this parent's version of history / master .. C 部分为TypeScriptFlow

  

确切地说,我正在谈论那些函数参数:

我相信你在谈论default parameters。它们允许您为函数的参数指定默认值。

基本用法:

: Object

在对对象进行解构时,也可以使用默认参数。

示例:

function sayHi (name = 'John') {
  console.log('Hi ' + name)
}

sayHi('James') // Hi James
sayHi() // Hi John

答案 1 :(得分:0)

它的打字稿很好,但它不是有效的打字稿,因为它在编译时会产生错误,确实是deconstructing,或者更具体地object destructuring使用default values。 它不编译的原因是参数的类型是Object,它不允许任何未编入索引的内容,例如:

let o: Object = { a: 5 };
console.log(o.a); // Error: Property 'a' does not exist on type 'Object'
console.log(o["a"]); // this is fine

code in playground

将其更改为any,它会正常工作:

function defaultPort({ port=123, user='test' }: any = {}) { // no error
}

code in playground

虽然最好只声明类型:

type Param = {
    port?: number;
    user?: string;
}

function defaultPort({ port=123, user='test' }: Param = {}) {
}

code in playground