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

szi*_*mek 6 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);
  }
}
Run Code Online (Sandbox Code Playgroud)

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

sma*_*c89 6

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

您也可以简单地做到这一点

doStuff(callback?: (n:number)=>number): number {
    return callback ? callback(this.n) : this.defaultFn(this.n);
}
Run Code Online (Sandbox Code Playgroud)

或与界面结合

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

doStuff(callback?: Callback): number {
    return callback ? callback(this.n) : this.defaultFn(this.n);
}
Run Code Online (Sandbox Code Playgroud)