具有动态属性的类型定义

时间:2021-03-18 23:58:02

标签: typescript

我正在获取这样的数据:

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

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

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

所以它总是相同的结构,除了 _embedded 中的属性名称。

我想要实现的是创建一个像这样的 TypeScript 类型别名:

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

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

1 个答案:

答案 0 :(得分:2)

这是我基于 kaya3's comment 的解决方案:

const trackers: ((value: boolean, previous?: boolean | undefined) => any)[] | ((value: string, previous?: string | undefined) => any)[]

可以这样使用:

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