使用TypeScript声明函数类型

13

我知道我以前问过这个问题,但我找不到那个问题,也记不起答案了。

我有一个对象,其中有几种方法具有相同的参数列表:

{

  foo: function(){
    return [];   // (return Array<T>)
  },

  bar: function(){
    return [];   // (return Array<T>)
  },

  baz: function(){
    return [];   // (return Array<T>)
  }

}

当我声明这个对象的接口时:

interface SomeObj {

   foo: Function,
   bar: Function,
   baz: Function

}

但我想为这些函数声明一个类型,类似于这样:

  type TestSuiteGetterFn <T>() => Array<T>;

  interface SomeObj {

       foo: TestSuiteGetterFn,
       bar: TestSuiteGetterFn,
       baz: TestSuiteGetterFn

    }

但是这段代码无法编译。

我很少在谷歌上遇到像这样困难的问题。


1
你收到了什么错误? - Chris
http://www.typescriptlang.org/play/index.html#src=interface%20UpdateFn%20%7B%0D%0A%20%20%20%20(name%3A%20string)%3A%20string%0D%0A%7D%0D%0A%0D%0Ainterface%20Message%20%7B%0D%0A%20%20%20%20updateFn%3A%20UpdateFn%0D%0A%7D%0D%0A%0D%0Alet%20message%3A%20Message%20%3D%20%7B%0D%0A%20%20%20%20updateFn(name%3A%20string)%3A%20string%20%7B%0D%0A%20%20%20%20%20%20%20%20return%20%60updated%3A%20%24%7Bname%7D%60%3B%0D%0A%20%20%20%20%7D%0D%0A%7D - Paul Samsotha
@peeskillet 谢谢,可能可以用,但我认为gyre的答案更理想? - Alexander Mills
@Chris 我在我的IDE(Webstorm)里得到了一个红色的波浪线,我不需要转译就知道会有错误,但怀疑这不是一个有意义的错误。 - Alexander Mills
1个回答

13

在声明函数类型时,您只是忘记了等号。

TypeScript Playground永久链接

type TestSuiteGetterFn<T> = () => Array<T>;

interface SomeObj {
     foo: TestSuiteGetterFn<string>,
     bar: TestSuiteGetterFn<number>,
     baz: TestSuiteGetterFn<string>
}

很高兴能帮忙!我自己也学到了一些关于TypeScript的新知识。 - gyre
同样的问题,如果您认为它是一个良好构建的问题,请直接返回原文。 - Alexander Mills
伙计们, <T> 是什么? - mesqueeb
<T>是泛型类型,必须传入,可以看到它被传递了3次。 - Alexander Mills

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接