Function 使用函数属性定义函数的接口
您可能知道,JavaScript中的函数可以具有与任何对象相同的属性。例如(摘自优秀的JavaScript:the Definitive Guide,第6版,第178页)使用函数作为记忆数组计算阶乘:Function 使用函数属性定义函数的接口,function,typescript,interface,properties,Function,Typescript,Interface,Properties,您可能知道,JavaScript中的函数可以具有与任何对象相同的属性。例如(摘自优秀的JavaScript:the Definitive Guide,第6版,第178页)使用函数作为记忆数组计算阶乘: function factorial(n: number): number { if (isFinite(n) && n > 0 && n == Math.round(n)) { if (!(n in factorial)) facto
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;
}
let factorial = function (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;
} as Factorial;
factorial[1] = 1;
但是编译器告诉我,Type'(n:number)=>number'不能分配给类型'Factorial'。类型“(n:number)=>number”中缺少索引签名
。
我不能做显而易见的事情,只能定义
私有索引:number代码>在函数内部,我被难住了。您拥有的就是一个示例。您必须使用类型断言来确保函数符合接口:
interface Factorial {
(n: number) : number;
[ index: number ]: number;
}
let factorial = function (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;
} as Factorial;
factorial[1] = 1;
我以为有更好的办法,但我想就是这样了。它成功了。谢谢