2

ファイルにコンパイルされたタイプスクリプトファイルのセットがありますが*.d.ts、エラーが発生し続けます:

systems.debug.d.ts(280,41): error TS2094: The property 'Models' does not exist on value of type 'Systems'.

宣言は次のようになります。

declare module Systems.Services.Stuff {
    class DefaultHubService {
        public Send(entry: Systems.Models.IEntry, successCallback: Function, failureCallback: Function): void;
    }
}

これは 280 行目で発生し(systems.debug.d.ts)、参照するのに苦労しているのは次のとおりです。

declare module Systems.Models {
    interface IEntry {
        Version: string;
        Content: KnockoutObservableString;
        DateCreated: KnockoutObservableDate;
        CreatorAccountId: KnockoutObservableString;
    }
}

これは 239 行目(systems.debug.d.ts)にあるため、奇妙で、問題の修正方法がわかりません。インターフェイスはサービスの前に含まれているため、Typescript に癖がない限り、私の知識では機能するはずです。誰でもエラーに光を当てることができますか?

== 編集 ==

問題の診断に役立つ場合に備えて、いくつかの追加情報を提供するだけです...

実際の実装は次のようになります。

// Systems/Services/Stuff/default-hub-service.ts
module Systems.Services.Stuff {
    export class DefaultHubService {
        public Send(entry: Models.IEntry, successCallback: Function, failureCallback: Function): void
        {
            // Do something here
        }
    }
}

// Systems/Models/ientry.ts
module Systems.Models {
    export interface IEntry {
        Version: string;
        Content: KnockoutObservableString;
        DateCreated: KnockoutObservableDate;
        CreatorAccountId: KnockoutObservableString;
    }
}

使用するすべての外部参照を含むルート レベルの参照ファイルがあり、これがコンパイル引数内に最初に含まれているため、すべての外部依存関係 (つまり、knockout.d.ts、jquery. d.tsなど)。

私は Typescript 0.9.0.1 を使用しており、ビルド スクリプトから直接 tsc.exe を呼び出してコンパイルしています。最後に、JavaScript出力ファイルがエラーなしで作成されるため、systems.debug.js正常にコンパイルされますが、宣言フラグを使用すると、エラーをスローするのはd.tsファイルだけです。

4

3 に答える 3

1

コードを試してもエラーは発生しません。使用している完全な例を次に示します。

declare class KnockoutObservableString {}
declare class KnockoutObservableDate {}

declare module Systems.Models {
    interface IEntry {
        Version: string;
        Content: KnockoutObservableString;
        DateCreated: KnockoutObservableDate;
        CreatorAccountId: KnockoutObservableString;
    }
}

declare module Systems.Services.Stuff {
    class DefaultHubService {
        public Send(entry: Systems.Models.IEntry, successCallback: Function, failureCallback: Function): void;
    }
}

var x = new Systems.Services.Stuff.DefaultHubService();
var y: Systems.Models.IEntry;

TypeScript Playgroundと、0.9.0.1 TypeScript Visual Studio Extension を使用した Visual Studio でこれを試しました。Visual Studio では、アンビエント宣言を という名前のファイルに分割し、systems.debug.d.tsその宣言の使用をapp.ts.

于 2013-07-26T07:07:09.590 に答える
1

それを引き起こしているものを見つけました!

うわー、これはクレイジーなものです...そして、まぐれで見つけたので、完全に理解しているかどうかはわかりません.

次のようなファイルがあります。

module Systems.Services.Systems
{
    export class GameSystemService
    {
        // stuff
    }
}

タイプスクリプトの遊び場で試してみると(私と同じエラーがあったため)、誤ってこれを削除して、すべてのエラーがなくなりました。それから元に戻し、他の人を削除しようとしましたが、エラーは残りました...だから私はそれがこれと関係があるに違いないことを知っていました...

ここで、モジュール名が でSystems.Services.Systemsあり、何らかの形でこれの宣言をコンパイルすると、2番目Systemsが最初のものと同じであると考えなければならないため、エラーが発生すると思います。他のすべてを爆破しますが、名前を次のように変更して修正しました:

module Systems.Services.GameSystems

その後、すべてがうまくいきました。名前を繰り返す名前空間を持つ問題を認識していなかったため、これが typescript のバグとして分類されているのか、コーディングの問題として分類されているのかはわかりません...

とにかくそれはそれを修正します...クレイジー...助けてくれてありがとう!

于 2013-07-26T23:06:03.670 に答える