【问题标题】:Strange function arguments奇怪的函数参数
【发布时间】:2017-01-12 12:24:52
【问题描述】:

我发现了这段我不完全理解的代码。准确地说,我说的是那些函数参数:

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

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

有人见过这个吗?

【问题讨论】:

  • 它的价值:那不是(香草)JavaScript。
  • 是TypeScript,需要使用tsc转成JS。
  • 部分类似于现代 JavaScript,但最后的 : Object = {} 如果引用正确,则不是。
  • @jonrsharpe:TypeScript 的游乐场不喜欢它,抱怨Object 没有portuser。但是,是的,可能是,有更多的声明或其他东西。
  • @T.J.Crowder 很有趣,它看起来像 stackoverflow.com/questions/23314806/… 中的内容。 OP,您能否更具体地说明您在哪里找到的?

标签: javascript typescript ecmascript-6


【解决方案1】:

正如 TJ 所述,: Object 部分是 TypeScriptFlow

确切地说,我说的是那些函数参数:

我相信你说的是default parameters。它们允许您为函数的参数分配默认值。

基本用法:

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

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

当你解构一个对象时,你也可以使用默认参数。

例子:

function printInfo ({ name = 'John', age = 30 }) {
  console.log('Name: ' + name)
  console.log('Age: ' + age)
}

printInfo({ name: 'James', age: 10 }) // Name: James, Age: 10
printInfo({ age: 20 }) // Name: John, Age: 20
printInfo({ name: 'Michael' }) // Name: 'Michael', age: 30

【讨论】:

    【解决方案2】:

    它是打字稿,但它不是有效的打字稿,因为它在编译时会产生错误,它确实是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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多