[TypeScript] tsconfig.json - esM

2019-12-11  本文已影响0人  小黄人get徐先生
前言

今天在搭建 react + webpack + typescript 环境的时候,默认导入 react 会提示错误(具体错误内容可以查看:默认导入错误)。

看了下 node_modules 下 react 压缩后的 js 文件使用的模块规范是 CommonJs

在网上搜索后,解决方法是需要在 tsconfig.json 文件中添加 esModuleInterop 参数,本着刨根问底的态度,发现这个参数是在 typescript 2.7 中发布的,下面让我们具体学习了解下这个参数的作用吧。


使用 --esModuleInterop 支持在 CommonJs 模块下使用 import d from 'cjs'

TypeScript 之前对于 CommonJs/AMD/UMD 模块与 ES6 模块处理方式相同,这就导致了一系列的问题。

// 像下面这样使用基本上会报错,文件名是 index.ts
import Koa from 'koa';
const app = new Koa();

基于 --esModuleInterop 这两种问题都会被解决:


例子:

使用 --esModuleInterop 会生成两个辅助方法 __importStar__importDefault 用于 import * 和 import default。

import * as foo from "foo";
import b from "bar";

编译后:

"use strict";
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
}
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
}
exports.__esModule = true;
var foo = __importStar(require("foo"));
var bar_1 = __importDefault(require("bar"));
上一篇 下一篇

猜你喜欢

热点阅读