我已获得以下代码:
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
方法具有相同的签名?
答案 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