【发布时间】:2019-12-10 07:04:55
【问题描述】:
我正在尝试实现一组链式函数,但不知何故我卡在这里。
interface ISimpleCalculator {
plus(value: number): this;
minus(value: number): this;
divide(value: number): this;
multiply(value: number): this;
sum(): void
}
interface ISpecialCalculator extends ISimpleCalculator {
specialPlus(value: number): ISimpleCalculator;
specialMinus(value: number): ISimpleCalculator;
}
let testCalculator: ISpecialCalculator;
testCalculator
.plus(20)
.multiply(2)
.specialPlus(40)
.plus(20)
.minus(5)
.specialMinus(20) //<-- Error! Property 'specialMinus' does not exist on type 'ISimpleCalculator'.
.sum()
我想归档链中函数的类型检查。在上面的例子中,我希望ISpecialCalculator 中的函数specialPlus 和specialMinus 只能使用一次,ISimpleCalculator 可以多次使用。我对打字稿很陌生,我一直在尝试不同的方法(高级类型(Pick 和Omit)),但到目前为止没有成功。我想知道在这种情况下是否有其他方法可以提供帮助。
【问题讨论】:
-
我认为这在 typescript 中是不可能的,你需要 JavaScript 运行时实现来实现这样的功能
-
Imo 你必须实现一个具体的类,然后它工作正常:typescriptlang.org/play/index.html#code/…
-
嗨@r3dst0rm,实际上结果是一样的。不要忘记
ISpecialCalculator接口包含多个函数,每个函数只允许使用一次。
标签: typescript chaining