代码之家  ›  专栏  ›  技术社区  ›  Pace

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

  •  8
  • Pace  · 技术社区  · 6 年前

    假设我有一个文件 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 回复  |  直到 6 年前
        1
  •  7
  •   Matt McCutchen    6 年前

    Official answer ,由 web search :生成 .js 为每一个 .ts 简化构建过程。

    另一个好处是,如果你做了一些傻事,比如:

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

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

        2
  •  0
  •   hgiasac    6 年前

    在Node.js 8.5.0中,本机支持导入模块。如果你不想再支持es5,你可以改变 module 选择 es2015

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

    adder.js 文件仍在创建中,但为空文件。覆盖工具不再关心它了