TypeScript - 코드 출력 분리
-
13-12-2019 - |
문제
나는 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;