【问题标题】:Defining the interface for a function using function properties使用函数属性定义函数的接口
【发布时间】:2017-11-24 14:32:48
【问题描述】:

您可能知道,JavaScript 中的函数可以像任何对象一样具有属性。例如(摘自优秀的 JavaScript:权威指南,第 6 版,第 178 页)使用函数作为记忆数组计算阶乘:

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;,我很难过。

【问题讨论】:

    标签: function typescript interface properties


    【解决方案1】:

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

    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;
    

    【讨论】:

    • 以为有更好的方法,但我想就是这样。它成功了。谢谢
    猜你喜欢
    • 2019-02-23
    • 2020-08-14
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    • 2018-01-10
    • 2018-12-29
    相关资源
    最近更新 更多