您可能知道,JavaScript中的函数可以将属性作为任何对象。例如(取自优秀的JavaScript:The Definitive Guide,第6版,第178页)使用函数作为memoization数组计算阶乘:
function factorial(n: number): number {
if (isFinite(n) && n > 0 && n == Math.round(n)) {
if (!(n in factorial))
factorial[n] = n * factorial(n - 1);
return factorial[n];
}
else
return NaN;
}
factorial[1] = 1;
我尝试定义以下界面:
interface Factorial {
(n: number) : number;
[ index: number ]: number;
}
但编译器告诉我Type '(n: number) => number' is not assignable to type 'Factorial'. Index signature is missing in type '(n: number) => number'
。
我不能做明显的事情,只是在函数内定义private index: number;
,我很难过。