gpt4 book ai didi

javascript - 子类方法签名推断

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

我有以下抽象类

// 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 从抽象类中推断出方法签名,这样我就有了:

  1. 每个子类都没有类型重复
  2. 严格的签名执行,例如从子类中的 data 类型中删除 number不会引发错误。

最佳答案

Typescript 不会从基类推断方法参数。它的工作方式是在类被键入后,检查该类是否与基类兼容。这意味着派生类中的参数可以是派生类型(这不合理,但类方法参数即使在严格的 null 检查下也是双变相关的)。

为了减少类型重复的数量,可以做的一件事是使用 Parameters 和 rest 参数解构。

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

关于javascript - 子类方法签名推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56359673/

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