所以我们可以做:
export function myMethod (param: number) :number
export function myMethod (param: string) :string
export function myMethod (param: string | number): string | number {
if (typeof param === 'string') {
return param.toUpperCase()
} else {
return param + 1
}
}
Run Code Online (Sandbox Code Playgroud)
我可以使用箭头功能声明并实现它吗?
export var myMethodArror = (param: string): string
export var myMethodArror = (param: number): number
export var myMethodArror = (param: string | number): string | number => {
..
}
Run Code Online (Sandbox Code Playgroud)
我知道不可能重复变量声明,但是我的问题是:是否可以使用箭头符号使函数重载?
Sam*_*m96 15
我猜它是在那时和现在之间添加的,因为您现在可以使用接口或类型(无关紧要的,除了关键字以外的相同语法)来添加它。当然也可以作为出口。虽然必须对函数进行命名(我想所有重载函数都必须命名),所以如果要将其用作回调,则必须首先声明它。
type IOverload = {
(param:number):number[];
(param:object):object[];
}
const overloadedArrowFunc:IOverload = (param:any) => {
return [param,param];
}
let val = overloadedArrowFunc(4);
Run Code Online (Sandbox Code Playgroud)
我更喜欢这样,它减少了重复编写的需要。一次又一次地写名字很烦人。
另外,要为对此提出任何疑问,是的,我已经any在实现中声明了该参数。我也可以将其声明为number|object,但我喜欢这样。就其他重载而言,它更容易扩展,而且更短,据我所知,它实际上不会阻止您的类型检查,因为您的重载签名可以做到这一点。
此解决方案基于@Sam96,但保留了完全键入的箭头函数代码。
type Create = {
(): Vector<0>;
<T>(x: T): Vector<T>;
<T>(x: T, y: T): Vector<T>;
};
const create: Create = <T>(
x?: T,
y?: T
) => ({
x: x ?? 0,
y: y ?? x ?? 0,
});
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以使用交集运算符&进行重载。
export let myMethodArror = ((param: string | number): string | number => {
...
}) as ((param: string) => string) & ((param: number) => number)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1868 次 |
| 最近记录: |