如何在TypeScript中重用函数签名定义

时间:2017-11-11 18:25:24

标签: typescript

我已获得以下代码:

class A {
  constructor(public n: number) {}  

  defaultFn(a: number): number {
    return a + 1;
  }

  doStuff(callback?): number {
    return callback ? callback(this.n) : this.defaultFn(this.n);
  }
}

如何告诉TypeScript传递给callback方法的可选doStuff函数应该与defaultFn方法具有相同的签名?

2 个答案:

答案 0 :(得分:5)

interface Callback {
    (n:number):number;
}

class A {
    constructor(public n: number) { }

    public readonly defaultFn: Callback = (a: number): number => {
        return a + 1;
    }

    public doStuff(callback?: Callback): number {
        return callback ? callback(this.n) : this.defaultFn(this.n);
    }
}

您也可以这样做

doStuff(callback?: (n:number)=>number): number {
    return callback ? callback(this.n) : this.defaultFn(this.n);
}

或与界面结合

interface Callback {
    (n:number):number;
}

doStuff(callback?: Callback): number {
    return callback ? callback(this.n) : this.defaultFn(this.n);
}

答案 1 :(得分:1)

还有一个选项是"查询"类型defaultFn。在这种情况下,您不需要手动维护回调类型:

class A {
    constructor(public n: number) {}  

    defaultFn(a: number): number {
        return a + 1;
    }

    doStuff(callback?: A['defaultFn']): number {
        return callback ? callback(this.n) : this.defaultFn(this.n);
    }
}

A['deafultFn']的结果是(a: number) => number