Typescript: حل الخيار JsonModule لا يعمل بدون esModuleInterop

تم إنشاؤها على ٣ يوليو ٢٠١٨  ·  22تعليقات  ·  مصدر: microsoft/TypeScript


إصدار TypeScript: 2.9.2 ، 3.0.0-dev.20180703


مصطلحات البحث:

حل JsonModule، esModuleInterop

الشفرة

import * as test from './test.json';

tsconfig.json:

{
    "compilerOptions": {
        "module": "commonjs",
        "moduleResolution": "node",
        "target": "es2017",
        "lib": ["es2017"],
        "strict": true,
        "sourceMap": true,
        "noEmitOnError": true,
        "baseUrl": ".",
        "resolveJsonModule": true,
        "outDir": "out"
    }
}

سلوك متوقع:

لا اخطاء.

السلوك الفعلي:

تجميع خطأ:

$ tsc
test.ts:1:23 - error TS2497: Module '"/home/kostya/tmp/resolve-json-test/test"' resolves to a non-module entity and cannot be imported using this construct.

1 import * as test from './test.json';
                        ~~~~~~~~~~~~~

عندما أقوم بإضافة خيار esModuleInterop إلى tsconfig.json :

diff --git a/tsconfig.json b/tsconfig.json
index 7f1afb8..e949135 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -9,6 +9,7 @@
         "noEmitOnError": true,
         "baseUrl": ".",
         "resolveJsonModule": true,
+        "esModuleInterop": true,
         "outDir": "out"
     }
 }

وتغيير بيان الاستيراد إلى:

diff --git a/test.ts b/test.ts
index 07bb9b7..dddcffb 100644
--- a/test.ts
+++ b/test.ts
@@ -1 +1 @@
-import * as test from './test.json';
+import test from './test.json';

إنها تعمل. ولكن مع الخيار esModuleInterop أحتاج إلى تغيير العديد من الواردات في مشروعي ، وهو أمر غير مرغوب فيه.

رابط الملعب:

القضايا ذات الصلة:

Bug Fixed

التعليق الأكثر فائدة

بعد تعيين solutionJsonModule إلى "true" ، واجهت نفس المشكلة في VS Code (TypeScript 3.2.2 ، VSCode 1.30.1). أدت إعادة تشغيل VS Code إلى حل المشكلة بالنسبة لي - لم أضطر إلى تغيير أي تكوين ts آخر

ال 22 كومينتر

أيضًا مع resolveJsonModule ، ولكن بدون esModuleInterop ، يظهر ملف json في دليل الإخراج.

بعد تعيين solutionJsonModule إلى "true" ، واجهت نفس المشكلة في VS Code (TypeScript 3.2.2 ، VSCode 1.30.1). أدت إعادة تشغيل VS Code إلى حل المشكلة بالنسبة لي - لم أضطر إلى تغيير أي تكوين ts آخر

تم التأكيد على أن تعيين resolveJsonModule إلى true في tsconfig.json حل هذه المشكلة.

تؤدي إعادة تشغيل VS Code يدويًا إلى حل هذه المشكلة.

بعد تعيين solutionJsonModule إلى "true" ، واجهت نفس المشكلة في VS Code (TypeScript 3.2.2 ، VSCode 1.30.1). أدت إعادة تشغيل VS Code إلى حل المشكلة بالنسبة لي - لم أضطر إلى تغيير أي تكوين ts آخر

شكرا لك ، لقد نجحت!

بعد تعيين solutionJsonModule إلى "true" ، واجهت نفس المشكلة في VS Code (TypeScript 3.2.2 ، VSCode 1.30.1). أدت إعادة تشغيل VS Code إلى حل المشكلة بالنسبة لي - لم أضطر إلى تغيير أي تكوين ts آخر

عملت من أجلي أيضًا ، شكرًا!

بعد تعيين solutionJsonModule إلى "true" ، واجهت نفس المشكلة في VS Code (TypeScript 3.2.2 ، VSCode 1.30.1). أدت إعادة تشغيل VS Code إلى حل المشكلة بالنسبة لي - لم أضطر إلى تغيير أي تكوين ts آخر

لقد نجح هذا بالفعل. شكرا 😃

بعد تعيين solutionJsonModule إلى "true" ، واجهت نفس المشكلة في VS Code (TypeScript 3.2.2 ، VSCode 1.30.1). أدت إعادة تشغيل VS Code إلى حل المشكلة بالنسبة لي - لم أضطر إلى تغيير أي تكوين ts آخر

شكرا ، عملت مثل السحر!

أرى في intellij سلوكًا مشابهًا لما وصفه intelliot أعلاه من أجل vs code. شكرا على اقتراحك.

بالنسبة لأولئك الذين قاموا بتحديث هدفهم إلى esnext فأنت بحاجة إلى إضافة ما يلي إلى tsconfig الخاص بك:
...
"الهدف": "esnext"،
"moduleResolution": "عقدة"،
...

في البداية بعد إعادة التشغيل ، يصبح الملف أخضر ، ثم بعد 3 ثوانٍ مظلل باللون الأحمر مرة أخرى. لذا فإن إعادة التشغيل في حالتي لا يحل هذه المشكلة.

@ chrisj- سكينر نفسه معي. لا يدري لماذا يحدث هذا.

لماذا تم إغلاق هذه المشكلة لأن هذه المشكلة لا تزال قائمة؟

عندي

    "esModuleInterop": true,
    "resolveJsonModule": true,
    "moduleResolution": "node",

و
const pkgJSON = require('../../package.json');

- Consider using '--resolveJsonModule' to import module with '.json' extensionts(2732)

أنا أستخدم solutionJsonModule بالفعل.

إذا كنت تستخدم WebStorm ، فيجب عليك أيضًا إعادة التشغيل.

لدي نفس المشكلة هنا،

في البداية بعد إعادة التشغيل ، يصبح الملف أخضر ، ثم بعد 3 ثوانٍ مظلل باللون الأحمر مرة أخرى. لذا فإن إعادة التشغيل في حالتي لا يحل هذه المشكلة.

في البداية بعد إعادة التشغيل ، يصبح الملف أخضر ، ثم بعد 3 ثوانٍ مظلل باللون الأحمر مرة أخرى. لذا فإن إعادة التشغيل في حالتي لا يحل هذه المشكلة.

لدي نفس المشكلة ، ولكن هذا لأنني نسيت تضمين المجلد الجديد الذي تم إنشاؤه / ملف ts في tsconfig.json

لدي نفس المشكلة ، ولكن هذا لأنني نسيت تضمين المجلد الجديد الذي تم إنشاؤه / ملف ts في tsconfig.json

نفسه ، شكرا يا أخي!

في حالتي: "ملف" -> "Invalidate Caches / Restart ..." -> "Invalidate and Restart" ، حل المشكلة

في حالتي ، أصلحت هذا من خلال القيام بما يلي:

        "moduleResolution": "node"

يمكن أن يؤدي هذا أيضًا إلى حل المشكلة:

        "module": "commonjs"

بالنسبة لحالتي ، لست متأكدًا مما إذا كان من المفترض أن يحدث هذا أم لا ولكن ، كان علي أن أضع tsconfig.json في نفس الدليل مثل مجلدي out و src .

على الرغم من أنني أضفت moduleResolution: node ، إلا أن الخطأ لا يزال موجودًا. بعد إعادة تشغيل VS ، تم إصلاحه

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

DanielRosenwasser picture DanielRosenwasser  ·  3تعليقات

bgrieder picture bgrieder  ·  3تعليقات

kyasbal-1994 picture kyasbal-1994  ·  3تعليقات

blendsdk picture blendsdk  ·  3تعليقات

dlaberge picture dlaberge  ·  3تعليقات