ウェブサイト検索

angularjs - サービスクラスの継承とファイルの順序


私はサービス(TypeScriptのクラス)app/resources/GeneralResource.tsとフォルダapp/resources/内の他のサービスを持っています。私はすべてのリソースをGeneralResourcesから継承したいです。

GeneralResource.ts ファイルの後にアルファベット順で来るすべてのファイル(クラス)は正常に動作しています。しかし、GeneralResource.ts ファイルの前に来るすべてのファイル(クラス)は実行時エラーが発生します。

こちらは例のクラスです:

export class DefectReasonResource extends GeneralResource implements IDefectReasonResource {

    static $inject = ['$q', '$http', 'baseUrl'];

    constructor(public $q:ng.IQService, public $http:ng.IHttpService, public baseUrl:string) {
       super($q, $http);
    }

    // ...

このクラスは問題なくコンパイルされます:

var app;
(function (app) {
    var common;
    (function (common) {
        var DefectReasonResource = (function (_super) {
            __extends(DefectReasonResource, _super);
            function DefectReasonResource($q, $http, baseUrl) {
                _super.call(this, $q, $http);
                this.$q = $q;
                this.$http = $http;
                this.baseUrl = baseUrl;
            }
            DefectReasonResource.$inject = ['$q', '$http', 'baseUrl'];
            return DefectReasonResource;
        })(common.GeneralResource);
        common.DefectReasonResource = DefectReasonResource;
        angular.module('myApp').service('defectReasonResource', DefectReasonResource);
    })(common = app.common || (app.common = {}));
})(app || (app = {}));

しかし、ファイルを開くとブラウザでエラーが発生します:

捕捉されていない TypeError: 未定義のプロパティ 'prototype' を読み取ることができません

私は、GeneralResource の後に宣言されたすべてのクラスでこの問題が発生するわけではないことを強調したいだけです。

継承を削除して、すべてのサービスにGeneralResourceを注入する方が良いと思います。しかし、継承の解決策を修正することは可能か疑問に思っています。

回答 #1

あなたは設定がどのようになっているか詳しく説明しませんでした。しかし、私が(TypeScript)の内部モジュールを使用したときにこれに遭遇しました。参照コメントを追加するのを忘れないようにする必要があります:

///<reference path="relative/path/to/GeneralResource.ts" />

あなたの app/resources/serviceName.ts ファイル内で。このコメントの目的は、最終的な app.js ファイル(--outFile フラグを使用する場合)において、ファイルの順序(またはその内容)が正しいことを確認するためです。

関連記事