我有以下抽象类
// AbstractFiller.ts
export abstract class AbstractFiller {
public abstract fill(data: number | string | boolean | Date, numberOfFillers: number): string;
}
和几个填充子类
export class WhiteSpacesFiller extends AbstractFiller {
public fill(data: number | string | boolean | Date, numberOfFillers: number): string {
// logic
}
}
export class ZerosFiller extends AbstractFiller {
public fill(data: number | string | boolean | Date, numberOfFillers: number): string {
// logic
}
}
// ...etc
TS是否有一种方法可以从抽象类中推断方法签名,以便获得:
number
类型中删除data
会不会引发错误。答案 0 :(得分:1)
Typescript不会从基类推断方法参数。它的工作方式是,在键入类之后,将检查该类与基类的兼容性。这意味着派生类中的参数可以是派生类型(虽然这听起来不合理,但即使在严格的null检查下,类方法参数也是双变量相关的。)
为减少类型重复的数量,可以做的一件事是将Parameters
与剩余参数解构一起使用。
export abstract class AbstractFiller {
public abstract fill(data: number | string | boolean | Date, numberOfFillers: number): string;
}
export class WhiteSpacesFiller extends AbstractFiller {
public fill(...[data, numberOfFillers]: Parameters<AbstractFiller['fill']>): string {
return ""
}
}
答案 1 :(得分:0)
如果我误解了这个问题,请问我,但是我认为您可以使用泛型来解决您的问题,即让您的AbstractFiller
类是泛型的。
这看起来像这样:
export abstract class AbstractFiller<T> {
public abstract fill(data: T, numberOfFillers: number): string;
}
export class WhiteSpacesFiller extends AbstractFiller<string> {
public fill(data: string, numberOfFillers: number) {
//logic
return data;
}
}
export class ZerosFiller extends AbstractFiller<number> {
public fill(data: number, numberOfFillers: number) {
return data.toString();
}
}