定义将函数作为参数的方法签名

时间:2018-02-14 10:44:23

标签: typescript

我想声明一个这个函数服从的类型定义:

var a : MyInterface = function(func : <T>(t: T) => number) {
  console.log("do Nothing");
  return func(123) + " someString";
}

我正在尝试的是构建一个接口,该接口使用函数f返回一个数字作为参数并返回一个字符串本身。根据我的理解,接口应该是这样的。

interface MyInterface {

    (func: (<T>(t: T) => number)) => string;
}

但它不起作用,抱怨最后的'=&gt;',说':' expected

如果我只是省略返回类型'string',编译器很高兴。我该怎么办?

1 个答案:

答案 0 :(得分:2)

在界面中,可调用签名的返回类型使用:而不是=>。所以在你的情况下它将是

interface MyInterface {
    (func: (<T>(t: T) => number)): string;
}

但是如果你只想声明一个函数类型,那么使用再次使用=>的简写语法会更直接。

type MyFunction = (func: (<T>(t: T) => number)) => string

前一种语法的优点是它允许您定义过载签名和混合类型,这些类型不仅可以调用,而且还具有属性。