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协同程序时,仍然有一种情况我无法理解。请查看更新的问题。查看更新,语法正确吗?我不知道示例中使用了
函数*
或协同程序
。这能清楚地显示出来吗?