我有以下Javascript对象:

{
   "dataMap":{
       "2027":{
          "userId":2027,
          "code":"abcdef",
          "title":"abcdef",
          "questions":1
       }
       "2028":{
          "userId":2028,
          "code":"abcdef",
          "title":"abcdef",
          "questions":1
       }
   }
}


它包含另一个对象dataMap及其内部的其他对象。有人可以告诉我如何为dataMap对象创建接口吗?

我想要的是一个界面,所以我可以输入:

var a = b.dataMap[2027].userId // okay and allowed
var a = b.dataMap[2027].xxxyId // gives a typescript error

最佳答案

您可以使用带有索引签名的接口:

interface User {
    userId: number;
    code: string;
    title: string;
    questions: number;
}

interface DataMap {
    [index: number]: User;
}


对于您的特定示例,其中数据映射再次包含在一个对象中:

interface DataMapContainer {
    dataMap: DataMap;
}

var b: DataMapContainer = { "dataMap": { ... } };
b.dataMap[2027].userId; // okay
b.dataMap[2027].xxx; // error


另请参阅:TypeScript interface for object with arbitrary numeric property names?

09-06 08:07