编译成JavaScript后,为什么TypeScript代码不再兼容?

时间:2018-05-17 05:10:58

标签: typescript compilation

我认为const greet = require('./greet');相当于import greet from './greet';

所以这两个文件应该一起工作:

  1. greet.ts

    export default ({ name, age }) => `Name: ${name}, Age: ${age}`;

  2. test.js

    const greet = require("./greet"); greet({ name: 'Smith', age: 21 });

  3. 但在编译之后,greet.ts原来是:

    "use strict";
    exports.__esModule = true;
    exports["default"] = (function (_a) {
        var name = _a.name, age = _a.age;
        return "Name: " + name + ", Age: " + age;
    });
    

    而不是:

    module.exports = (function (_a) {
        var name = _a.name, age = _a.age;
        return "Name: " + name + ", Age: " + age;
    });
    

    为什么会这样?

2 个答案:

答案 0 :(得分:1)

Typescript编译器将--target作为ES5或ES6。这取决于您为TS设置的编译器选项。 代码在此基础上总是不同的,你不能指望类似的JS被证明。

那么TypeScript在ES2015上提供了什么?我觉得增加最多的价值:

  1. 类型别名
  2. 接口
  3. 未来的ES2016 +功能(如 注释/装饰器和async / await)

答案 1 :(得分:1)

如果您编写export default,则使用"default"密钥导出该成员。以下是如何使用CommonJS导入它:

// test.js
const greet = require("./greet").default;
greet({ name: 'Smith', age: 21 });

我建议来自Mozilla的文章ES6 In Depth: Modules

  

默认导出没有什么神奇之处;它就像任何其他导出一样,除了名为"default"