![](/img/trans.png)
[英]How to overload function by argument object shape in TypeScript?
[英]Is it possible to overload object function properties in typescript?
我想知道是否有一种简单的方法可以在 typescript 中重载 object 的 function 属性。示例:
interface Doable {
do(s: number): number;
do(s: string): string;
}
let obj: Doable = {
do(s: number): number;
do(s: string): string;
do(s: number | string) {
return s;
}
}
这里的编译器会报错,抱怨do
属性是重复的。
一个潜在的解决方案可以是
let obj = {
do(s: any): any {
return s;
}
};
但是,我不喜欢将any
类型用于s
参数。 有没有办法在不使用any
的情况下声明 function ?
我想知道是否有一种简单的方法来重载打字稿中对象的函数属性。 例子:
interface Doable {
do(s: number): number;
do(s: string): string;
}
let obj: Doable = {
do(s: number): number;
do(s: string): string;
do(s: number | string) {
return s;
}
}
此处的编译器将引发错误,抱怨do
属性是重复的。 是否有另一种不使用any
函数来声明函数的方式?
我已经知道此实现将起作用。
let obj: Doable = {
do(s: any) {
return s;
}
}
我想知道是否有一种简单的方法来重载打字稿中对象的函数属性。 例子:
interface Doable {
do(s: number): number;
do(s: string): string;
}
let obj: Doable = {
do(s: number): number;
do(s: string): string;
do(s: number | string) {
return s;
}
}
此处的编译器将引发错误,抱怨do
属性是重复的。 是否有另一种不使用any
函数来声明函数的方式?
我已经知道此实现将起作用。
let obj: Doable = {
do(s: any) {
return s;
}
}
我想知道是否有一种简单的方法来重载打字稿中对象的函数属性。 例子:
interface Doable {
do(s: number): number;
do(s: string): string;
}
let obj: Doable = {
do(s: number): number;
do(s: string): string;
do(s: number | string) {
return s;
}
}
此处的编译器将引发错误,抱怨do
属性是重复的。 是否有另一种不使用any
函数来声明函数的方式?
我已经知道此实现将起作用。
let obj: Doable = {
do(s: any) {
return s;
}
}
其实直接放在object上是可以的,语法有点笨拙:但是可以用:
let myLiteral = {
myFunc: ((a : number | string, c? : string) => {
// implementation goes here
}) as {
// overloads go here
(a : number): number;
(b : string, c : string): boolean;
}
};
当使用 * .d.ts或types.d.ts文件来定义 object 文字时,有一个巧妙的技巧来实现这一点。
假设您希望您的 object function 具有以下结构
myFunc(arg1: number, arg2: string): void;
myFunc(arg1: number, arg2: string, arg3: Boolean): void;
首先,在您的 object 文字类型或接口中,将 object 属性定义为 object 包含不同结构的 ZC1C425264.78394FCAB1
// *.d.ts
type MyObjType = {
...,
myPropFunc: {
(arg1: number, arg2: string): void;
(arg1: number, arg2: string, arg3: Boolean): void;
}
}
然后,像往常一样简单地创建重载的 function :
// *.ts file
function myFunc(arg1: number, arg2 : string): void;
function myFunc(arg1: number, arg2 : string, arg3: Boolean): void;
function myFunc(arg1: number, arg2 : string, arg3?: Boolean): void {
...
}
const myLiteral: MyObjType = {
myFunc
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.