Breeze实体与打字稿

fre*_*aso 4 knockout.js single-page-application typescript breeze

我正在使用Breeze + Typescript + Knockout进行Spa,我面临以下问题:当我使用EntityManager.createEntity创建一个新实体时,typescript不允许我使用Breeze从元数据生成的observable.Typescript只"看到""entityAspect"和"entityType"属性.我正在使用DefinitelyTyped的类型定义.任何帮助是极大的赞赏!

Jud*_*her 5

您可以为您的类型创建一个扩展的接口breeze.Entity:

/// <reference path="breeze.d.ts" />
module model {
    export interface ResponsesItem extends breeze.Entity {
        ContentTypeID: string;
        Title: string;
        Description: string;
        EventDate: any;
        /* etc. */
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,只要您需要以类型化方式使用它们,就可以将对象强制转换为此接口,例如从服务器加载时的查询结果:

     private loadResponses(): void {
         this.dataservice.ListResponses()
            .then((data: { results: breeze.Entity[]; query: breeze.EntityQuery; XHR: XMLHttpRequest; }) => {
                var results: model.ResponsesItem[] = <model.ResponsesItem[]>data.results;
                // Do something with typed results array here.
         }).fail((error) => {
            this.handleDataError(error);
         });
      }
Run Code Online (Sandbox Code Playgroud)