我有一个使用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
的原因是什么?
答案 0 :(得分:2)
TypeScript在ECMAScript版本的导入语法上规范化了它们的语法。所有TypeScript代码都应使用此样式:
import { ZipCodeValidator } from "./ZipCodeValidator";
编译器很乐意将其转换为AMD,CommonJS或System样式的导入 - 但它并不是单向映射到其中的每一个。
所以简短的版本是,编写ECMAScript导入并使用编译器标志将它们转换成你喜欢的任何东西。
另外,当实际打算使用ECMAScript模块加载器时,添加.js
在import语句中起作用 - 即TypeScript理解你的意思。