简体   繁体   English

如何在 TypeScript 中使用命名参数重载 function?

[英]How do I overload a function with named parameters in TypeScript?

I have a function which I want to be able to pass normal arguments and keyword (named) arguments. Yet, whenever I try doing the overload I get an error.我有一个 function,我希望能够传递正常的 arguments 和关键字(命名)arguments。但是,每当我尝试进行重载时,我都会收到错误消息。

I tried overloading the function this way:我尝试以这种方式重载 function:

function myFunc({name, surname, age}: myFuncParams): string;
function myFunc(name: string, surname?: string, age?: number): string;
function myFunc(nameOrObj: string | myFuncParams, surname?: string, age?: number): string {
// do something and return a string
  return ""
};

Where:在哪里:

interface myFuncParams {
  name: string,
  surname?: string,
  age?: number
}

Of course this is a simplification of a bit more complicated case;当然,这是对更复杂的情况的简化; but the idea here is to be able to pass name and age, for example;但是这里的想法是能够传递姓名和年龄,例如; without having to move surname or doing the following:无需移动姓氏或执行以下操作:

myFunc("Foo", null, 111);

And just doing:只是在做:

myFunc({name:"Foo", age:111});

I get the following error:我收到以下错误:

function myFunc({name, surname?, age?}: myFuncParams): string;
//        ^: This overload signature is not compatible with its implementation signature. (2394)
function myFunc(name: string, surname?: string, age?: number): string;
function myFunc(nameOrObj: string | myFuncParams, surname?: string, age?: number): string {
// do something and return a string
  return ""
};

Typescript playground link : Typescript 游乐场链接

Edit: as @jonrsharpe's pointed:编辑:正如@jonrsharpe 指出的那样:

function myFunc({name, surname, age}: myFuncParams): string;
function myFunc(name: string, surname?: string, age?: number): string;
function myFunc(nameOrObj: string | myFuncParams,surname?: string,age?: number): string {
  return ""
};

Forgot to mark surname and age as optional in the final declaration.忘记在最终声明中将姓氏和年龄标记为可选。

Try this way试试这个方法

function myFunc(opts: myFuncParams): string;
function myFunc(name: string, surname?: string, age?: number): string;
function myFunc(nameOrObj: string | myFuncParams, surname?: string, age?: number): string {
// do something and return a string
  return ""
};

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM