在TypeScript中使用JSON填充Class []

时间:2014-02-12 14:57:29

标签: json typescript

作为我模型的一部分,我在TypeScript中有这个类:

module App.Model {

    export class Unit {
            id: number;
            participantId: number;
            name: string;
            isProp: boolean;
        }
}

在控制器中,我需要一个以id为键的哈希:

module App.Controllers {
    export class MyController {

        public units: App.Model.Unit[];

        populateDemoData() {
            this.units = {
                "1": { "id": 1, "participantId": 1, "name": "Testname", "isProp": true },
                "2": { "id": 2, "participantId": 1, "name": "Another name", "isProp": false }
            };
        }
    }
}

但是,编译控制器时,我收到以下错误消息:

Error 2 Cannot convert '{  }; [n: number]: App.Model.Unit; }' to ' }; [n: number]: App.Model.Unit; }' is missing property 'concat' from type 'App.Model.Unit[]'.

我做错了什么?为什么TypeScript要求concat属性?

1 个答案:

答案 0 :(得分:3)

您将units定义为Array对象,但为其指定了一个文字对象。为了澄清,哈希(文字对象)不是数组。

如果所有ID都是整数,你仍然可以使用数组,但它会是这样的:

populateDemoData() {
    this.units = [];
    this.units[1] = { "id": 1, "participantId": 1, "name": "Testname", "isProp": true };
    this.units[2] = { "id": 2, "participantId": 1, "name": "Another name", "isProp": false };
}

修改

好的,您必须定义一个哈希表来执行此操作,但您还需要使App.Model.Unit成为与您的JSON对象匹配的接口。

module App.Model {

    export interface Unit {
        id: number;
        participantId: number;
        name: string;
        isProp: boolean;
    }

    export interface UnitHashTable {
        [id: string]: Unit;
    }
}

module App.Controllers {

    export class MyController {

        public units: App.Model.UnitHashTable;

        populateDemoData() {
            this.units = {
                "1": { "id": 1, "participantId": 1, "name": "Testname", "isProp": true },
                "2": { "id": 2, "participantId": 1, "name": "Another name", "isProp": false }
            };
        }
    }
}