动态键值键入打字稿

时间:2019-11-13 17:11:14

标签: angular typescript

我需要一点帮助。

我的API响应如下:

Week At A Glance: { objA: [{}], objB: [{}] },
records: { Employee Records: [{}], Email Records: [{}], message: "" },
history: { [{}] }

当我尝试如下创建模型时,无法继续。我创建如下

interface DesiredResponse {
    [key: string] : {
        objA: ObjA[],
        objB: ObjB[]
    },
    records: Records[],
    history: History[]
}

interface Records {
    [key: string]: EmpRecords | EmailRecords;
    message: string
}

打字稿错误:类型为'Records []'的属性'records'无法分配给字符串索引类型'{objA:BbjA []; objB:ObjB []}'

类型为'string'的属性'message'不能分配给字符串索引类型'EmpRecords | EmailRecords'

如何有效地键入它,以便在访问此模型时得到自动建议。

1 个答案:

答案 0 :(得分:0)

编辑:

这实际上是由您的代码中的一个单一问题引起的,在该问题中,您定义的接口将Records接口的列表版本用于records属性,而不是API响应是实际返回的(不是数组-对象):

interface DesiredResponse {
  // ...
  records: Records; // Originally Records[]
}

原始答案:

这是因为在TypeScript界面​​中定义单独的属性通常需要您使用分号而不是逗号,而JSON则相反,您可以使用相反的方式(也可以使用逗号代替分号):

export interface MyInterface {
  property1: string;
  property2: boolean;
  // etc
}

vs:

export interface MyInterface {
  property1: string,
  property2: boolean // Would not compile
}