4

スパにBreeze+Typescript + Knockoutを使用していますが、次の問題に直面しています。EntityManager.createEntityを使用して新しいエンティティを作成すると、typescriptでBreezeがメタデータから生成するオブザーバブルを使用できなくなります。Typescriptは、「entityAspect」プロパティと「entityType」プロパティのみを「認識」します。DefinitelyTypedの型定義を使用しています。どんな助けでも大歓迎です!

4

4 に答える 4

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. */
    }
}

サーバーからロードするときのクエリの結果など、型指定された方法でオブジェクトを操作する必要があるときはいつでも、オブジェクトをこのインターフェイスにキャストできます。

     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);
         });
      }
于 2013-03-22T09:33:15.457 に答える
2

Breeze.js typed entitiesで私の回答を確認してください。T4TS をハッキングして、Breeze をサポートする TS 定義を吐き出しました。

于 2013-04-16T03:47:04.723 に答える
1

見て:https://github.com/borisyankov/DefinitelyTyped/blob/master/knockout/knockout.d.ts

ko で表示される関数 (observable など) は、次の行により KnockoutStatic インターフェイスで定義された関数です。

declare var ko: KnockoutStatic;

このインターフェイスのスニペットを次に示します。

interface KnockoutStatic {
    utils: KnockoutUtils;
    memoization: KnockoutMemoization;
    bindingHandlers: KnockoutBindingHandlers;
    virtualElements: KnockoutVirtualElements;
    extenders: KnockoutExtenders;

    applyBindings(viewModel: any, rootNode?: any): void;
    applyBindingsToDescendants(viewModel: any, rootNode: any): void;
    applyBindingsToNode(node: Element, options: any, viewModel: any): void;

    subscribable: KnockoutSubscribableStatic;
    observable: KnockoutObservableStatic;
    computed: KnockoutComputedStatic;
    observableArray: KnockoutObservableArrayStatic;
    .....

したがって、ko に新しい関数が必要な場合は、KnockoutStatic インターフェイスに新しい関数を定義する必要があります。

interface KnockoutStatic {
    yourFunc: KnockoutObservableStatic;
}

インターフェースはオープンエンドであるため、インターフェース定義のさまざまな部分を複数のファイルで宣言できます。お役に立てれば。

于 2013-03-22T04:58:59.443 に答える