Kendo UI DataSource-skjema modell i Typescript


Jeg har en kendo.data.Model i min Angular-app som jeg konverterer til Typescript. DataSource fungerer fint helt til jeg legger til Model-definisjonen i skjemaet.

Finnes det en annen syntaks for å definere modeller med en DataSource ved bruk av Typescript Kendo?

Den ikke-Typescript versjonen fungerte fint.

var someModel = new kendo.data.Model({
     id: "id",
     fields: {
          id: { type: "string" },
          name: { type: "string", validation: { min: 1, required: true } },
          isActive: { type: "boolean" }
          }
     });

 var source = new kendo.data.DataSource({
       transport: {
            read: (options: any) => {
                 someService.getData(options.data).then(function (results) {
                      options.success(results.data);
                      });
                  }
            },
            schema: {
                model: someModel
            }});

Rediger: problemet var at jeg gikk glipp av "define" som i "kendo.data.Model.define({}). Men når jeg endret det, flyttet problemet seg, og nå kan jeg ikke bruke den typede modellen i annen kode:

class Foo {
    someModelProp: kendo.data.Model;

    constructor() {
        this.someModelProp = kendo.data.Model.define({*see above code for fields*});
    }
}

Jeg får kompilasjonsfeilen på linjen "this.someModelProp =":

Type 'typeof Model' kan ikke tildeles til type 'Model'. Egenskapen '_defaultId' mangler i type 'typeof Model'.

Jeg kan endre "someModelProp" til "any", men da beveger jeg meg bort fra å bruke typede modeller, og det går imot hensikten med Typescript.

Svar #1

Kanskje gammel, men jeg lette etter de samme spørsmålene. Hvis det hjelper, fungerer dette for meg:

class Foo extends kendo.data.Model {
    private modelDef: typeof kendo.data.Model = kendo.data.Model.define({*see above code for fields*});
    private model: kendo.data.Model;
    private data: any;

    constructor() {
        super();
        this.model = new this.modelDef([]);
    }

    init(data: any): Foo {
        this.data = data;
        this.model = new this.modelDef(data);
        return this;
    }

    // Typescript properties
    get _Id(): number { return this.model.get('id'); }
    set _Id(value: number) { this.model.set('id', value); }

    get _Name(): number { return this.model.get('name'); }
    set _Name(value: number) { this.model.set('name', value); }
}

Viktig: bruk understreker for TypeScript-egenskaper, ellers oppstår det en kjøretidsfeil, bare bevis det og se på generert JavaScript ...

Jeg håper dette hjelper, og hvis noen har en bedre løsning, eller noen kommentar, takk på forhånd!