如果以后没有使用导入语句,则不会编译导入语句

时间:2018-03-15 10:08:37

标签: typescript

假设我在分隔文件中定义了两个类,如下所示。

// a.ts
export default class A {
}
// b.ts
export default class B {
}

以下是我使用" a.ts"的代码。和" b.ts"。

// app.ts
import A from "./a";
import B from "./b";

使用tsc编译源代码后,我发现import语句未发送到JavaScript文件。

// app.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });

但是如果我添加了一些代码来使用AB,那么它们就会被发出。

// app.ts
import A from "./a";
import B from "./b";

const a = new A();
const b = new B();
// app.js
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
}
Object.defineProperty(exports, "__esModule", { value: true });
const a_1 = __importDefault(require("./a"));
const b_1 = __importDefault(require("./b"));
const a = new a_1.default();
const b = new b_1.default();

我可以更改编译行为,以便它始终发出import语句,无论它是否被使用。

以下是我的tsconfig.json

{
  "compilerOptions": {
    "target": "ES2017",
    "module": "commonjs",
    "strict": false,
    "moduleResolution": "node",
    "esModuleInterop": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  }
}

1 个答案:

答案 0 :(得分:1)

这是design,如果未使用某个模块或仅使用其中的类型,则不会发出该模块。如果要为副作用导入模块,则应按照建议的here

进行简单导入
import "./a";
import "./b";