const fact: (n: number) => number = ((f: any) => f(f))((g: any) => (n : number) => n > 0 ? n * g(g)(n - 1) : 1);
昨天我开始玩Typescript,但尝试后却心碎。 n显然是数字,但是f和g呢?
答案 0 :(得分:1)
您可以声明一个接受其自身作为参数并返回结果的可调用接口:
interface Rec<T> {
(p: Rec<T>): T
}
const fact: (n: number) => number = ((f: Rec<(n: number)=> number>) => f(f))((g) => (n : number) => n > 0 ? n * g(g)(n - 1) : 1);
注意:编译器将推断g
的类型为Rec<(n: number)=> number>
或更不通用的,让编译器推断其可以版本化的所有内容:
interface Rec {
(p: Rec): (n: number)=> number
}
const fact = ((f: Rec) => f(f))((g) => (n) => n > 0 ? n * g(g)(n - 1) : 1);