20220121 TIL
4072 ワード
esModuleInterop
commonJSモジュールをesmでインポートする場合は、コンパイル結果に
node_modules/moment/ts3.1-typings/moment.d.ts:784:1
export = moment;
This module is declared with using 'export =', and can only be used with a default import when using the 'esModuleInterop' flag.
(このモジュールは「export=」を使用して宣言されており、デフォルトのインポートとともに使用できるのは、「esModuleInterop」タグを使用する場合のみです.)
この問題を解決するために、以下のように修正することができる.
したがって、tsconfigに
commonJSモジュールをesmでインポートする場合は、コンパイル結果に
__importStar
および__importDefault
を追加することを選択できます.import moment from 'moment';
moment();
moment
ではcommonJSモジュールとしてエクスポートされるため、前述したようにアンダースコアにエラーが提示される.node_modules/moment/ts3.1-typings/moment.d.ts:784:1
export = moment;
This module is declared with using 'export =', and can only be used with a default import when using the 'esModuleInterop' flag.
(このモジュールは「export=」を使用して宣言されており、デフォルトのインポートとともに使用できるのは、「esModuleInterop」タグを使用する場合のみです.)
この問題を解決するために、以下のように修正することができる.
import * as moment from 'moment';
moment();
しかし問題は,esmの規格から見ると*
を用いたimportの結果はobject
にしか達しないため,これが正しい方式とは考えられないことである.したがって、tsconfigに
"esModuleInterop": true
を追加することによって解決することができる.// 컴파일 전
import moment from 'moment';
// 컴파일 후
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const moment_1 = __importDefault(require("moment"));
Reference
この問題について(20220121 TIL), 我々は、より多くの情報をここで見つけました https://velog.io/@bandor/esModuleInteropテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol