1

私はタイプスクリプトを試していますが、非常に便利です。

私はかなり大きなプロジェクトを持っており、タイプスクリプトを使用して書き直すことを検討していました。ここでの主な問題は次のとおりです。

ファイル A.ts:

class A extends B {
    // A stuff
}

ファイル B.ts:

class B {
    // B stuff
}

このコマンドで A.ts をコンパイルすると:

tsc --out compiledA.js A.ts

拡張後に「B」を脅かす方法がわからないため、コンパイラからエラーが発生します。

したがって、「解決策」は A.ts に (コードの最初の行として) 含めることになります。

/// <reference path="./B.ts" />

同じコマンドで A.ts を再度コンパイルする

tsc --out compiledA.js A.ts

B.ts と A.ts の両方のコードを含むコンパイル済みの A.js が生成されます。(これはとてもいいかもしれません)

私の場合、コンパイル済みの A.js ファイルで A.ts コードをコンパイルするだけでよく、B.ts のものをそこに入れたくありません。

確かに、私が欲しいのは:

  • tsc --out A.js A.ts => A.ts のみをコンパイル
  • tsc --out B.js B.ts => B.ts のものだけをコンパイル

「extends」キーワードを削除することでそれを行うことができますが、それを行うと、タイプスクリプトの利点のほとんどが失われます。

これを行う方法があるかどうか誰か教えてもらえますか?

4

2 に答える 2

2

いくつかの調査の結果、問題がコンパイラの--out引数によって発生したことがわかりました。

モジュールを処理する場合、@silent__thoughtソリューションは問題なく機能します。そうでない場合は、requireステートメントを使用して(質問を参照)、-out引数なしで「main.ts」ファイルをコンパイルする必要があります。

于 2012-10-03T19:27:31.907 に答える
0

編集: Andrea が指摘するように、--outパラメーターを省略すると、期待される動作が得られます。つまり、ソース ファイルの組み合わせはありません。他の人を助けることができる場合に備えて、この代替ソリューションを以下に残します。


これを行うには、外部モジュール構文 (CommonJS または AMD) を使用する必要があると思います。

あなたの例を使用して:

a.ts

import B = module("b")

class A extends B.B {
    // A stuff
}

ビーツ

export class B {
    // B stuff
}

でコンパイルしtsc --out compiledA.js A.tsます。

これにより、CommonJS システムを使用してa.jsインポートされます。b.js結果のファイルは次のようになります。

a.ts

var __extends = this.__extends || function (d, b) {
    function __() { this.constructor = d; }
    __.prototype = b.prototype;
    d.prototype = new __();
}
var B = require("./b")
var A = (function (_super) {
    __extends(A, _super);
    function A() {
        _super.apply(this, arguments);

    }
    return A;
})(B.B);

ビーツ

var B = (function () {
    function B() { }
    return B;
})();
exports.B = B;
于 2012-10-03T13:59:44.477 に答える