繁体   English   中英

是否可以在typescript中重载object function属性?

[英]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.tstypes.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.

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