使用函数属性

时间:2017-06-21 15:25:50

标签: function typescript interface properties

您可能知道,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;,我很难过。

1 个答案:

答案 0 :(得分:1)

你所拥有的是hybrid types的一个例子。您必须使用类型断言来确保该函数符合接口:

inline-block