如何定义hateoas链接的类型?

时间:2018-01-03 06:05:40

标签: typescript typescript2.0

让我们采取以下休息回应,

{
   id: 123,
   name : "test",
   addressId : 4
   _links : {
       self : {
                href : "xyz",
                method : "GET"
             },
        address : {
                href : "xyz/address/4",
                method : "GET"
             }
   }
}

无论如何在这里定义"_links"的类型?我能想象的是我可以定义类似的东西,

interface HateoasUrl {
    href : string;
    method : string; 
}

interface HateoasKeyValuePair{
      [key: string] : HateoasUrl;
}

但不知怎的,它似乎并不正确,因为_links中会有多个键值。但是这种类型表示只能有一个关键值。那么如何为一个可以有多个属性的对象定义类型呢?

1 个答案:

答案 0 :(得分:1)

我不完全确定这是否是您想要的,但我将此问题解释为:“我如何使用打字稿来模拟HAL文档?”。我假设是HAL,因为你使用_links属性,即使HAL没有在链接上指定method属性。

我这样做有点像这样:

interface HalLink {
  href: string;
  type: string;
}

interface HalLinks {
   [s: string]: HalLink | HalLink[];
}

这里我们有一个链接接口,另一个类型代表_links对象。 _links对象中的每个项目可以是单个HAL链接,也可以是HAL链接数组。