我有一个函数,我希望能够传递正常参数和关键字(命名)参数。然而,每当我尝试重载时,我都会得到一个错误。
我试过这样重载函数:
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 ""
};
地点:
interface myFuncParams {
name: string,
surname?: string,
age?: number
}
当然,这是一个更复杂的情况的简化;但这里的想法是能够传递姓名和年龄,例如;无需移动姓氏或做以下操作:
myFunc("Foo", null, 111);
myFunc({name:"Foo", age:111});
我得到以下错误:
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:
编辑:正如@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 ""
};
忘记在最后声明中将姓氏和年龄标记为可选。
试试这个
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 ""
};