在函数语句

时间:2018-02-03 02:22:20

标签: typescript

在Typescript中,我们可以有一个函数实现这样的接口:

interface ISample {
    (argument: boolean): number
}

let v: ISample;
v = function (isTrue: boolean): number {
    return 10;
}

但这仅适用于通过函数表达式创建的函数(即,通过变量初始化它们,在本例中它是v)。当我尝试做类似于函数语句的事情时,它不起作用:

interface ISample {
    (argument: boolean): number
}

function v: ISample (isTrue: boolean): number {
    return 10;
} // Doesn't work, compiler says '"(" expected'

那么,有没有办法用函数语句或运气来做到这一点,我不得不抛弃接口函数或使用函数表达式代替?谢谢!

2 个答案:

答案 0 :(得分:1)

接口在那里,因此您可以要求变量或参数或字段符合接口。您可以使用函数语句声明函数,然后将其分配到需要ISample的任何位置。

interface ISample {
    (argument: boolean): number
}

function v(isTrue: boolean): number {
    return 10;
} 
let weNeedSample: ISample = v;

您不能强制函数语句符合当前typescript语法中的接口。只要您尝试将函数分配给类型为ISample的符号,就会出现错误。

使用函数表达式时也会发生这种情况。在这种情况下,会发生错误,因为您对ISample类型的变量执行赋值,如果您只有函数表达式(例如使用IFFE),则无法指定必须符合接口。

答案 1 :(得分:0)

您可以像这样将函数委托转换为接口

interface ISample {
  (argument: boolean): number
}

<ISample>function v(isTrue) { // isTrue is a boolean and return type is number
  return 10;
}