[嵌套的接口/类型]:如何在Typescript的类内声明函数返回类型?

时间:2019-03-27 09:15:52

标签: typescript

我有一些大类,它们的函数带有要重构的复杂返回对象。

class BigClass {
    ...
    getReferenceInfo(word: string): { isInReferenceList:boolean, referenceLabels:string[] } {
    ...
    }
}

我想做这样的事情(声明它接近我的功能):

class Foo {
    ...
    type ReturnObject = { isInReferenceList:boolean, referenceLabels:string[] };
    getReferenceInfo(word: string):ReturnObject   {
      ...
      }
}

但是现在Typescript只允许我在类外声明接口/类型:

type ReturnObject = { isInReferenceList:boolean, referenceLabels:string[] };
class Foo {
    ...
    getReferenceInfo(word: string):ReturnObject   {
      ...
      }
}

有没有办法在Typescript中嵌套接口?

1 个答案:

答案 0 :(得分:1)

如评论中所述,当前不支持此功能。有existing suggestion in GitHub支持允许class充当类型声明的命名空间。如果您关心此功能,则可能需要转到GitHub问题并给它一个和/或描述用例(如果它特别引人注目)。

当前的解决方法是像这样使用declaration merging

// separate namespace 
// not close to your method either 
namespace Foo {
  // must export the type in question 
  export type ReturnObject = {
    isInReferenceList: boolean,
    referenceLabels: string[]
  };
}

class Foo {
  // must refer to the type as fully qualified by namespace 
  getReferenceInfo(word: string): Foo.ReturnObject {
    return null!;
  }
}

这显然不是完美的,如果您的用例是“使类型声明更接近使用它的方法”,这甚至不值得,但这甚至无法解决。

哦,希望能有所帮助。祝你好运!