Javascript 可选解构函数参数

Javascript 可选解构函数参数,javascript,typescript,ecmascript-6,Javascript,Typescript,Ecmascript 6,如何修改下面的函数以使第二个参数成为可选参数 类型脚本: function getName(name: string, { lastName }: { lastName: string }) { // ... } getName('John'); // error 更新: function getName(name: string, { lastName }: { lastName: string }) { // ... } getN

如何修改下面的函数以使第二个参数成为可选参数

类型脚本:

function getName(name: string, {
    lastName
  }: {
    lastName: string
  }) {
  // ...
}

getName('John'); // error
更新:

function getName(name: string, {
    lastName
  }: {
    lastName: string
  }) {
  // ...
}

getName('John'); // error
到目前为止,我找到的解决方案是将解构带到函数体中:

function getName(name: string, options: {
    lastName: string
  } = {} as any) {
    const { lastName } = options;
    // ...
}

getName('John'); // OK
但是,我仍然找不到如何在这种情况下使其工作:

const getName = Bluebird.coroutine(function* co(name: string,
  {
    lastName
  }: {
    lastName: string
  }) {
    // ...
});

getName('John'); // error


/* -------- DECLARATIONS -------- */

declare namespace Bluebird {
    interface CoroutineOptions {
        yieldHandler(value: any): any;
    }
}

declare class Bluebird<R> {
    static coroutine<T, A1, A2>(
        generatorFunction: (a1: A1, a2: A2) => IterableIterator<any>,
        options?: Bluebird.CoroutineOptions
    ): (a1: A1, a2: A2) => Bluebird<T>;
}

options={}
应该有效吗


function getName(name:string,options={}){}
定义options对象时,需要将
lastName
属性的接口定义为可选接口。如果未定义任何
选项
,则默认对象为空对象{}

function foo(required: string, options: { lastName?: string } = {}) {
    console.log(required);
    if (options.lastName) {
        console.log(options.lastName);
    }
}

foo('foo1')
foo('foo2', {})
foo('foo3', {lastName: 'bar'})
运行上述命令时,控制台输出为:

foo1
foo2
foo3
bar

你自己试试看。

当我在问题中更新时,取出解构图是有效的。在使用Bluebird协同程序时,仍然有一种情况我无法理解。请查看更新的问题。查看更新,语法正确吗?我不知道示例中使用了
函数*
协同程序
。这能清楚地显示出来吗?