首页 > 解决方案 > 具有动态属性的类型定义

问题描述

我得到这样的数据:

{
  "_embedded": {
    "Customers": [{ "CompanyName": "AWS" }]
  }
}

另一个可能看起来像这样:

{
  "_embedded": {
    "Products": [{ "SKU": "ABC123" }]
  }
}

所以除了里面的属性名外,它总是相同的结构_embedded

我想要实现的是创建一个 TypeScript 类型别名,如下所示:

type MyType<T> = {
  _embedded: {
    Customers: Array<T>
  }
}

我可以使数组中使用的类型成为通用类型,但我不知道是否可以使_embeddedCustomer此处)中的属性名称依赖于字符串值。

标签: typescript

解决方案


这是我基于kaya3 评论的解决方案:

type MyType<T, K extends string> = {
  _embedded: Record<K, T>
}

它可以这样使用:

const x: MyType<Array<Customer>>, 'customers'> = { 
  _embedded: { customers: [] }
}

推荐阅读