为什么为仅具有接口的.ts文件生成.js文件

时间:2018-08-02 19:34:48

标签: typescript

假设我有一个文件adder.ts,看起来像:

import { Operand } from './operand';

export interface Adder {
  add(op1: Operand, op2: Operand): Operand;
}

我的tsconfig.json如下:

{
    "compilerOptions": {
        "declaration": false,
        "module": "commonjs",
        "outDir": "./dist",
        "target": "es6",
        "sourceMap": true
    },
    "include": [
        "src/**/*"
    ]
}

当我翻译此代码时,我希望只收到dist/adder.d.ts。但是,还会产生一个dist/adder.js的内容:

Object.defineProperty(exports, "__esModule", { value: true });

为什么生成此文件?它有什么作用?归根结底,我想我不太在意,因为它永远不会真正被需要/加载,并且会被任何捆绑程序删除。我注意到的唯一原因是我的覆盖率工具报告此文件为未发现。

2 个答案:

答案 0 :(得分:7)

Official answer找到的

web search:为每个.js生成一个.ts可以简化构建过程。

另一个好处是,如果您做一些愚蠢的事情,例如:

import * as Adder from "./dist/adder";  // or whatever is the correct path
console.log(Adder);

您将获得一个空的名称空间,而不是运行时错误。

答案 1 :(得分:0)

从Node.js 8.5.0开始,本机支持导入模块。如果您不想再支持es5,则可以将module选项更改为es2015

{
  "compilerOptions": {
    "module": "es2015"
  }
}

adder.js文件仍被创建,但是为空文件。覆盖率工具将不再在意