문제

나는 typescript를 시험해 보고 있는데 그것이 매우 유용하다고 생각합니다.

저는 상당히 큰 프로젝트를 진행하고 있으며 TypeScript를 사용하여 다시 작성하는 것을 고려하고 있었습니다.여기서 주요 문제는 다음과 같습니다.

파일 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 코드를 모두 포함하는compileA.js가 생성됩니다.(아주 좋을 수도 있겠네요)

내 경우에는 컴파일된 A.js 파일에서 A.ts 코드만 컴파일하면 되며 B.ts 항목이 거기에 포함되는 것을 원하지 않습니다.

실제로 내가 원하는 것은 다음과 같습니다.

  • tsc --out A.js A.ts => A.ts 항목만 컴파일
  • tsc --out B.js B.ts => B.ts 항목만 컴파일

"extends" 키워드를 제거하면 할 수 있지만 그렇게 하면 typescript의 장점이 대부분 손실됩니다.

누군가 이것을 할 수 있는 방법이 있는지 말해 줄 수 있나요?

도움이 되었습니까?

해결책

몇 가지 연구 끝에 컴파일러의 --out 인수로 인해 문제가 발생했다는 것을 알았습니다.

@silent__thought 솔루션은 모듈을 처리하려는 경우 잘 작동합니다.그렇지 않은 경우에는 require 문(질문 참조)을 사용한 다음 --out 인수 없이 "main.ts" 파일을 컴파일해야 합니다.

다른 팁

편집하다: Andrea가 지적했듯이 --out 매개변수를 사용하면 예상되는 동작을 얻을 수 있습니다. 즉,소스 파일의 조합이 없습니다.다른 사람에게 도움이 될 수 있도록 이 대체 솔루션을 아래에 남겨두겠습니다.


이 작업을 수행하려면 외부 모듈 구문(CommonJS 또는 AMD)을 사용해야 한다고 생각합니다.

귀하의 예를 사용하여 :

a.ts

import B = module("b")

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

b.ts

export class B {
    // B stuff
}

다음으로 컴파일 tsc --out compiledA.js A.ts.

이로 인해 a.js 수입 b.js CommonJS 시스템을 사용합니다.결과 파일은 다음과 같습니다.

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);

b.ts

var B = (function () {
    function B() { }
    return B;
})();
exports.B = B;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top