6

さまざまなタイプのクラスがたくさんあると聞いたことがありますが、Ambient クラスは何をし、正確には何をするのでしょうか? 他のクラスとどう違うの?

typescript に関するいくつかのビデオを見てこれを理解しました。彼らは常にアンビエント クラスについて話しているのですが、彼らは通常の古いクラスを定義し続けています。つまり、変数と関数を含む通常のクラスと何ら変わらないように思えます。それ。

それで、誰かができるなら、言語にとらわれないコンテキストでのアンビエントクラスとは何か、そしてそれはtypescriptで何を意味するのかを定義してください?

4

1 に答える 1

12

アンビエント宣言は、既存のコードの型情報を提供するために使用されます。

たとえば、TypeScript で次のように記述したとします。

module Example {
    export class Test {
        do() {
            return 'Go';
        }
    }
}

var test = new Example.

クラス.を見つけやすくするために、の後にオートコンプリートが表示されます。Test

いくつかの TypeScript コードから使用している JavaScript の負荷が既にある場合、このオートコンプリートは得られず、オートコンプリートを行った場所は型を認識しません。JavaScript ファイル全体を TypeScript で書き直すのではなく、代わりにアンビエント宣言を記述できます。

たとえば、次の JavaScript ファイルがはるかに大きく、TypeScript で書き直すのに長い時間がかかると想像してください。

var Example;
(function (Example) {
    var Test = (function () {
        function Test() {
        }
        Test.prototype.do = function () {
            return 'Go';
        };
        return Test;
    })();
    Example.Test = Test;
})(Example || (Example = {}));

アンビエント宣言には型情報が含まれていますが、実装は含まれていません。

declare module Example {
    export class Test {
        do() : string;
    }
}

これにより、TypeScript ですべてを書き直す必要なく、JavaScript の完全な型チェックとオートコンプリートが可能になります。

いつこれをしますか?通常、サードパーティの JavaScript を大量に使用する場合は、アンビエント宣言を記述します。ライブラリを更新するたびに TypeScript で書き直すことはできないため、アンビエント宣言を使用すると、影響を最小限に抑えて更新を行うことができます (新しい機能を追加する必要があるかもしれませんが、実装の詳細のために変更を加える必要はありません)。アンビエント宣言は、サードパーティ ライブラリが何をするかを示すコントラクトとして機能します。

アンビエント宣言の作成ガイド を読むと、詳細を確認できます。また、一般的な JavaScript ライブラリの既存のアンビエント宣言は、Definitely Typed で多数見つけることができます。

于 2013-08-21T09:48:20.337 に答える