打字稿知道导入 - >要求但不知道要求 - >进口?

时间:2018-02-07 13:17:07

标签: javascript node.js typescript es6-modules

我有一个使用es6模块加载器的简单文件:

1.ts

import {foo} from "./2"
foo('hello');

2.ts

function foo (a){console.log(a);};
export {foo}

当tsconfig设置为:

"module": "commonjs",

我们可以看到它将import转换为require

(输出)1.js

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var _2_1 = require("./2");
_2_1.foo('hello');

没关系。但是如果我现在通过require使用模块加载:

1.ts

var a = require("./2")
a('hello');

2.ts

function foo (a){console.log(a);};
module.exports.foo= foo 

并设置"module": "es6",:然后输出为:

(输出)1.js

var a = require("./2");  // why it didnt compile it to `import` ??
a('hello');

问题:

TS无法将require编译为import的原因是什么?

1 个答案:

答案 0 :(得分:2)

TypeScript在ECMAScript版本的导入语法上规范化了它们的语法。所有TypeScript代码都应使用此样式:

import { ZipCodeValidator } from "./ZipCodeValidator";

编译器很乐意将其转换为AMD,CommonJS或System样式的导入 - 但它并不是单向映射到其中的每一个。

所以简短的版本是,编写ECMAScript导入并使用编译器标志将它们转换成你喜欢的任何东西。

另外,当实际打算使用ECMAScript模块加载器时,添加.js在import语句中起作用 - 即TypeScript理解你的意思。