gpt4 book ai didi

typescript - Typescript 子类中的方法重载

转载 作者:搜寻专家 更新时间:2023-10-30 21:40:31 25 4
gpt4 key购买 nike

我的想法很简单:

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

}

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

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

Class 'B' incorrectly extends base class 'A'. Types of property 'getSomething' are incompatible. Type '(n: number, name: string) => number' is not assignable to type '(name: string) => number'.

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

最佳答案

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

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;
}
}

编辑

通过上面的代码,你也覆盖了原来的功能。当以这种方式给出参数时,您有责任调用父类(super class)函数。一个例子:

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;
}
}

关于typescript - Typescript 子类中的方法重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41963460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com