首页 文章

在Typescript中的后代类中重载方法

提问于
浏览
2

我想到的很简单:

class A {
    getSomething(name: string): number {
        return 1;
    }

 }

class B extends A {
    getSomething(n: number, name: string): number {
        return 2;
    }
}

在一个类中定义的方法应该在后代类中使用附加参数进行重载 . 实际上,B类中的方法将根据新参数绕道而行 . 但是,我收到错误:

类'B'错误地扩展了基类'A' . 属性'getSomething'的类型不兼容 . 类型'(n:number,name:string)=> number'不能分配给'(name:string)=> number' .

请参阅playground中的此代码 . 这里的正确方法是什么?这有可能吗?

1 回答

  • 2

    您可以显式声明重载的函数签名:

    class A {
        getSomething(name: string): number {
            return 1;
        }
    
     }
    
    class B extends A {
        getSomething(name: string): number;
        getSomething(n: number, name: string): number;
    
        getSomething(n, name?) {
            return 2;
        }
    }
    

    EDIT

    使用上面的内容,您也可以覆盖原始功能 . 当参数以这种方式给出时,您有责任调用超类函数 . 一个例子:

    class A {
        getSomething(name: string): number {
            return 1;
        }
     }
    
    class B extends A {
        getSomething(name: string): number;
        getSomething(n: number, name: string): number;
    
        getSomething(n: any, name?: any): any {
            if (typeof name !== "string") { 
                return super.getSomething(n);
            } 
            return 2;
        }
    }
    

相关问题