Typescript: خطأ "لا يمكن ترجمة مساحات الأسماء" مع - IsolatedModules ولا توجد مساحات أسماء

تم إنشاؤها على ١٧ أبريل ٢٠١٧  ·  52تعليقات  ·  مصدر: microsoft/TypeScript

إصدار TypeScript: nightly (2.3.0-dev.20170417)

الشفرة

function f() {}

سلوك متوقع:

لا يوجد خطأ ، أو رسالة خطأ حول ملف ليس وحدة نمطية في مشروع --isolatedModules .

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

src/a.ts(1,1): error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.

يحدث هذا لأننا في program.ts verifyCompilerOptions للبحث عن أي ملف مصدر ليس إعلان وحدة خارجية ، وفشلنا في الملف الأول ، مهما كان.
يجب ترقية رسالة الخطأ لتعكس السبب الحقيقي لإصدارنا هذا الخطأ ، وعدم ذكر مساحات الأسماء.
بالتناوب ، يمكننا فقط السماح بالملفات بدون عمليات الاستيراد والبحث فعليًا عن مساحة الاسم قبل إضافة هذا الخطأ.

Bug Error Messages help wanted

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

A global file cannot be compiled using '--isolatedModules'. Ensure your file contains imports, exports, or an 'export {}' statement.

ال 52 كومينتر

يجب أن تكون رسالة الخطأ أوضح. بدلاً من namespaces يمكن القول non-module . DanielRosenwasser توصيات؟

يجب ألا تكون هناك رسالة خطأ في هذه الحالة. يجب أن يقوم خيار --isolatedModules بإيقاف تشغيل نظام الوحدة النمطية الداخلية تمامًا ، إذا استمرت أخطاء tsc بهذه الطريقة ، فإن الخيار لا يؤدي وظيفته.

في # 15839 كنت أنوي تعديل سلوك الفحص لكنني أدركت لاحقًا أن هذا الفحص لا طائل من ورائه وأن الحل الأمثل هو إزالته.
لطالما سمحت شركة Typescript باستخدام مساحة الاسم داخل وحدة خارجية باستخدام --isolatedModules على:

export function something() {} // export found, so this module is considered 'external'
namespace ns {} // namespace is still valid in an external module

وبالتالي فإن الشيك لا يفعل أي شيء في تلك الحالة (التي تبدو غير صالحة) ، عندما يُفترض أن يقدم شكوى. فلماذا تشتكي عندما لا يستخدم المبرمج أي مساحة أسماء ، ولا يفعل شيئًا خاطئًا؟

wilonth سبب هذه المشكلة هو أن رسالة الخطأ خاطئة: مساحات الأسماء جيدة تمامًا إذا كان جزء من الوحدة النمطية (es6) ، ولكن يجب أن يكون أي ملف غير وحدة نمطية خطأ.

@ andy-ms كنت أحاول أن أشير إلى أن الكود الكامل للتحقق من هذا الخطأ لا طائل من ورائه ، وعلينا فقط إزالته بدلاً من تعقيد الكود أكثر.
نقطتي هي أنه عند تشغيل --isolatedModules ، يجب اعتبار كل ملف كوحدة نمطية خارجية (ES6) ، فترة. بهذا المعنى ، يجب أن يكون استخدام Namespaces قانونيًا لأنه في الوقت الحالي ، من القانوني تمامًا استخدام Namespaces داخل وحدات ES6 (مع تشغيل --isolatedModules ).

نقطتي هي أنه عند تشغيل --isolatedModules ، يجب اعتبار كل ملف كوحدة نمطية خارجية (ES6) ، فترة.

الدلالات هنا هي أن الوحدة النمطية هي ملف به استيراد أو تصدير واحد على الأقل من المستوى الأعلى. لا يهم كيف تستدعي المترجم.

mhegazy نعم وهذه القاعدة هي بالضبط أصل المشكلة التي لدينا هنا. تتعامل القاعدة بشكل غير عادل مع الملف بدون استيراد أو تصدير كجزء من نظام الوحدة النمطية الداخلية القديم ، لذلك يرفض --isolatedModules الملف.
الآن يجب ألا نغير القاعدة لأن ذلك سيؤدي على الأرجح إلى كسر الكثير من الأشياء ، ولكن يمكننا حل المشكلة الحالية بسهولة شديدة بمجرد إزالة رسالة الخطأ هذه.
لنتخيل أن رسالة الخطأ "لا يمكن تجميع مساحات الأسماء" تمت إزالتها ، فما الخطأ الذي يمكن أن يحدث؟ ماذا عن قاعدة الكود التي تستخدم وحدة داخلية ، مثل مترجم Typescript نفسه؟ باستخدام --isolatedModules ، هل سيؤدي التحويل البرمجي إلى رمز غير موجود وإرباك المستخدم؟ لا ، لن يحدث ذلك ، سيكون هناك الكثير من رسائل خطأ Typescript حول الرموز غير المحددة ، لأن --isolatedModules كسر الروابط بين الملفات ، وهو أمر واضح تمامًا لفهمه.
هل يمكنك العثور على أي سلبيات مع إزالة رسالة الخطأ هذه؟ لم أستطع. لماذا لا نختار الحل الأسهل ، الذي لا يتضمن أي عمل (فقط أزل الخطوط) وليس له أي سلبيات؟

باستخدام --isolatedModules قيد التشغيل ، هل سيؤدي ذلك إلى تجميع التعليمات البرمجية غير الضرورية وإرباك المستخدم؟ لا لن تفعل ذلك

نعم.

الهدف من علامة --isolatedModules هو التحقق من أن البرنامج يمكن تجميعه بنجاح من خلال ترجمة ملف واحد.

لا يمكن ترجمة مصدر كود TypeScript بنجاح من خلال تحويل ملف واحد. يوجد رمز مثل هذا في كل مكان:

ملف 1

namespace ts {
  export var x = 10;
}

ملف 2

namespace ts {
  var y = x; // transpiles to ts.x during whole-program compilation
}

إذا قمنا بترجمة ملف واحد file2 ، فسوف ينكسر.

سيئتي ، لقد أفسدت الاختبار. أنا بموجب هذا أسحب اقتراحي. شكرًا لك RyanCavanaugh على التذكير.

لذا يجب أن يكون الحل: اكتشاف استخدام مساحة الاسم الحقيقي قبل التخلص من رسالة الخطأ هذه (أي الحل "البديل" الذي اقترحه @ andy-ms). لا يمكننا فقط تغيير النص إلى شيء آخر لأن رسالة الخطأ في هذه الحالة خاطئة تمامًا.
أريد أن أقوم بعلاقات عامة ، لكن هل لا يزال بإمكاني أن أكون موثوقًا هنا بعد إلقاء كل هذه الهراء؟

A global file cannot be compiled using '--isolatedModules'. Ensure your file contains imports, exports, or an 'export {}' statement.

إذا قمنا بترجمة ملف واحد file2 ، فسوف ينكسر.

آسف لاستحضار الأرواح ، ولكن بالتأكيد هذا ، عند استهداف الوحدات ، يفشل بشيء مثل 'x' is not defined ؟ هذه الحالة لا تبدو مختلفة بالنسبة لي عن التافهة:

ملف 1

var x = 10;

ملف 2

var y = x;

والتي تعمل أيضًا عند التسلسل / التقييم العالمي وليس مع الوحدات ؛ لا علاقة لها بـ namespaces .

بشكل أساسي ، لماذا يزعج المطبوع على الكتابة أن الملفات التي لا تحتوي على import أو export ليست وحدات نمطية ، بينما يجب أن تعرف بالفعل من خيار المترجم module ؟ على سبيل المثال ، تُجمّع Typescript نفسها بدون تعيين module ، لذا فهي تستخدم none الافتراضي ، لذلك يمكن للمجمع أن يفترض التسلسل / التقييم العام.

عند استخدام --module <something> واستخدام إقرارات غير مستوردة من ملفات أخرى ، (بما في ذلك مساحات الأسماء نفسها) ستفشل الكتابة المطبوعة بالفعل مع "غير محدد" قبل --isolatedModules ، ونفس الشيء بعد export {} الحل البديل ، لذلك لا يبدو هذا بمثابة انقطاع في التوافق لإزالة هذا التخمين - هل أفتقد شيئًا ما؟

لقد لاحظت أنه لسبب ما لا يزال بإمكانك استخدام import / export مع --module none --isolatedModules ، وهو أمر محير إلى حد ما ، ربما يكون خطأ؟

DanielRosenwasser كمستخدم نهائي: ماذا يعني "ملف عالمي"؟ أنا أحب التوجيه رغم ذلك. ربما يشبه الأمر "الملفات التي لا تحتوي على أي عبارات استيراد أو تصدير ليست وحدات نمطية ، ولا يمكن تجميعها باستخدام '--isolatedModules'. أضف عبارة 'export {}' إذا تم تقييم هذا الملف فقط من حيث الآثار الجانبية." - على الرغم من أن اللغة هناك لا تبدو رسالة خطأ كبيرة- y.

أرى نفس الخطأ لمشروع js بسيط. لقد قمت للتو بإنشاء نموذج لمشروع js أدناه هو محتوى ملفات الحزمة والبرامج النصية. كيف يمكنني حل هذه المشكلة؟

Package.json
{
"plnkr": {
"وقت التشغيل": "النظام"
}
}

lib / script.js
//
// لعبة ورق
// بواسطة ديراج كومار
//

دع بطاقة 1 = "آس البستوني" ،
card2 = "عشرة من القلوب" ؛

console.log ("مرحبًا بك في لعبة ورق!") ؛

console.log ("تم التعامل معك:") ؛
conosle.log ("" + card1) ؛
console.log ("" + card2)؛

أي تحديثات على هذا؟

غالبًا ما أجد نفسي أفعل ذلك في اختبارات صغيرة.

describe('jest', () => {
  it('finds this test', () => {
    expect(true).toBeTruthy();
  });

  it('parses this typescript', () => {
    const actual: number = 0;
    const expected: number = 0;
    expect(actual).toEqual(expected);
  });
});

export {
  // Use an empty export to please Babel's single file emit.
  // https://github.com/Microsoft/TypeScript/issues/15230
}

أريد حقًا خيارًا يجعل TypeScript يعتبر كل ملف .ts كوحدة نمطية ES6 ، بغض النظر عما إذا كان يحتوي على عبارات استيراد / تصدير أم لا. افترضت في الأصل أن الخيار --isolatedModules هو هذا الخيار ، لكنه يتسبب في حدوث هذا الخطأ المربك للغاية عند استيراد / تصدير ملفات أقل. (ما زلت لا أفهم ما تعنيه رسالة الخطأ بمساحات الأسماء. لا أعتقد أنني أستخدم هذه الميزة.) السبب في رغبتي في هذا الإعداد هو أنني واجهت العديد من المشكلات التي لم يتم اكتشافها بواسطة TypeScript لأنني أشرت عن طريق الخطأ متغير عالي المستوى من ملف .ts في ملف آخر (كلاهما لا يحتوي على عبارات استيراد / تصدير ، لذلك لم يتعامل TypeScript معهما كوحدات ES6) على الرغم من استخدام node / parcel / webpack حيث لا يمكن للملفات الرجوع إلى بعضها البعض المتغيرات غير المصدرة من هذا القبيل.

لقد انتهيت من هنا بينما كنت أحاول إصلاح نوع من الإزعاج المرتبط بذلك. التعليقات الواردة أدناه هي فقط لمساعدة أي مستخدمين آخرين لـ VS Code يبحثون عن هذا الخطأ باستخدام تطبيق create-react-app و TypeScript.

عند تكوين خادم setupProxy.js برمز مثل هذا:

const proxy = require('http-proxy-middleware');
module.exports = function(app) { /* ... */ };

يقرأ react-scripts هذا الملف خارج عملية التحويل ts ، لذلك يجب أن يكون js عاديًا.

هذا يعمل تمامًا كما هو موثق ، لكن له آثار جانبية مزعجة.

يتضمن tsconfig.json إنشاؤه بواسطة react-scripts جميع الملفات الموجودة في src ، بما في ذلك setupProxy.js . نتيجة لذلك ، يقوم بتشغيل VS Code لإظهار الخطأ Cannot compile namespaces... في setupProxy.js ، قم بتمييز الكود بخط أحمر وقم بتضمينه في جزء المشاكل. في الإعداد الخاص بي ، يقوم أيضًا بتمييز الملف وجميع مجلدات أسلافه باللون الأحمر.

الحل: قم بإيقاف رسالة الخطأ VS Code باستبعاد الملف setupProxy.js في tsconfig.json.

{
  // ...
  "exclude": ["src/setupProxy.js"]
}

react-scripts يفرض isolatedModules: true ، لكن لا يبدو أنه يستبدل exclude .

بديل: أضف تصدير مسمى إلى `` setupProxy.js:

export const _ = '';

من خلال تصدير المستوى الأعلى ، أصبح الآن صالحًا مع - IsolatedModules.

غالبًا ما يتلقى المطورون هذه الرسالة نظرًا لوجود ملف لا يجب تضمينه في المشاركة (gulp.js ، إلخ)

تنبيه - إذا كنت تستخدم تطبيق create-رد فعل ورأيت هذه المشكلة كما لو كنت ... فقد تمكنت من تجاوز ذلك عن طريق إجراء تغيير على ملف tsconfig.json الخاص بي ...

تغيير ما يلي

    "isolatedModules": true,

إلى

    "isolatedModules": false,

UncleFifi ثم ينتقل الخطأ من فحص النوع إلى تحويل بابل ، انظر التحذير الأول .

jtbennett ، لا يمكنك تصدير أي شيء على الإطلاق باستخدام export {}; - الشكل المتدهور export { name, localName as exportName };

UncleFifi ثم ينتقل الخطأ من فحص النوع إلى تحويل بابل ، انظر التحذير الأول .

فقط إذا كنت تستخدم بالفعل مساحات الأسماء. تتعلق هذه المشكلة بشكل أساسي بهذا الخطأ الذي يشكو من ظهور مساحات الأسماء عندما لا تستخدم حتى مساحات الأسماء ويحدث فقط أن يكون لديك ملف قانوني مع استيراد / تصدير.

فقط إذا كنت تستخدم بالفعل مساحات الأسماء. تتعلق هذه المشكلة بشكل أساسي بهذا الخطأ الذي يشكو من ظهور مساحات الأسماء عندما لا تستخدم حتى مساحات الأسماء ويحدث فقط أن يكون لديك ملف قانوني مع استيراد / تصدير.

حسنًا ، آسف - لقد مرت فترة منذ أن قرأت هذا الموضوع! ومع ذلك ، فإن السبب في تعيينهم --isolatedModules في CRA هو أنه يحاكي عن كثب قيود babel المطبوعة (نظرًا لأن babel عبارة عن نقل ملف واحد أيضًا) ، لذلك يجب أن تدرك على الأقل أنك تزيل هذا الحارس- سكة حديدية.

إذن ، هل الحل الحالي للخطأ Cannot compile namespaces when --isolatedModules flag is provided لإضافة export {}; في أعلى الملف؟

نعم ، سيعمل ذلك على حل المشكلة. (بافتراض أنك لا تستخدم TypeScript namespace فعليًا. وإلا فستواجه مشكلة مختلفة وربما مشروعة.)

ركضت للتو في هذه الرسالة بسبب وجود ملف ملف "فارغ" (أي تم التعليق على الملف بالكامل). أنا سعيد لأن TS اشتعلت هذا ، لكن رسالة الخطأ كانت غامضة للغاية (وتم كسر الألوان على تثبيت CentOS 7 من الفانيليا ، ولكن ربما يرجع ذلك إلى خادم webpack dev ، لا يتعلق بـ TS مباشرة)

screen shot 2019-02-06 at 14 20 14

_Edit: لا يمكن التكاثر. من المؤكد أنني كنت أحدق في الملف الذي يتكون من ثلاثة عمليات تصدير عالية المستوى فقط وكان لدي هذا الخطأ ، ولكن في وقت سابق ، ارتكبت خطأ في مكان آخر

حدث هذا الخطأ

// Cannot compile namespaces:
export const foo = 'foo';

// Compiles fine
const foo = 'foo';
export { foo };

@ denis-sokolov سؤال واضح: هل لديك أيضًا أشياء أخرى في هذا الملف ، مثل مساحات الأسماء؟

إذا كان حرفيا هو export const ، فسيكون تخميني الثاني هو أن الكتابة المطبوعة تُستخدم في شيء مثل webpack مع ts-loader ، ولا ترى المحتوى إلا بعد المرور السابق (مثل babel-loader) الذي يتوسع export بطريقة ما ، لكن هذا نوع من الامتداد.

أنا غير قادر على إعادة إنتاجه بعد الآن. آسف ، simonbuchan ، على الإنذار الخاطئ.

لا توجد فكرة عن سبب تلقي هذا الخطأ في هذا الملف المحدد.
الملفات الأخرى تتصرف بشكل جيد

screen shot 2019-02-18 at 12 49 07
screen shot 2019-02-18 at 12 48 34

أنا في موقف أستخدم فيه CRA TypeScript وأستورد حزمة لا تحتوي على @types . أرغب في إضافة declare module 'package' لتقديم الأنواع الخاصة بي ، لكن لا يمكنني وضع هذا البيان في أي ملف وحدة. لذا ، أمضي قدمًا وأنشئ types.ts لوضع كشف declare module هناك. الآن حصلت على هذا الخطأ.

عندما أتجاوز isolatedModules إلى false ، تقوم CRA بتغييره مرة أخرى بالنسبة لي. هذا ليس حلا.

عندما أقوم بإضافة export {} إلى ملف types.ts مع declare module ، أحصل على اسم وحدة غير صالح في الزيادة. في حين أن. يتم تجنب هذا الخطأ عن طريق وضع الإعلان في ملف غير وحدة نمطية ، ولكن CRA من خلال هذا الإعداد القسري isolatedModules يفرض على كل ملف أن يكون وحدة نمطية!

لذلك هناك مسار دائري لحل خطأ واحد فقط للهبوط على الآخر والعكس. كيف يمكن حل هذا؟

Bnaya على التخمين ، الملفات التي تعمل تستخدم بيانات الاستيراد أو التصدير؟ استخدم فقط واحدًا من require()/module.exports و import/export في شفرتك. بخلاف ذلك ، تحقق من أن جميع ملفاتك مغطاة بـ tsconfig include (تحقق من المستندات للحصول على التفاصيل الكاملة عن ذلك

يجب أن تكون إعلانات الوحدة النمطية TomasHubelbauer بتنسيق .d.ts لهذا السبب ، من بين أمور أخرى.
لم يكن لدي سوى إعدادات إعادة إضافة CRA التي أزلتها ، ولم أغيرها مرة أخرى ، ولكن ربما يكون أكثر إلحاحًا للوحدات المعزولة؟

simonbuchan لقد جربت .d.ts لكن ذلك لم ينجح بالنسبة لي أيضًا ، سأقوم بالإبلاغ عن السبب بالضبط ، ولست متأكدًا مما كان عليه. وبالفعل أعادت CRA كتابة هذا الإعداد لي.

simonbuchan لقد جربت كل ما سبق مسبقًا - بلا جدوى :(

simonbuchan حسنًا ، لذا يعمل .d.ts ، يمكنني إعلان الوحدة هناك وكتابتها . السبب في أنني تخليت عنها في الأصل هو أنه بالنسبة لتلك المطبوعات التي أريد الإعلان عنها في تلك الوحدة ، أحتاج إلى الإشارة إلى أنواع أخرى من الكتابة ، ولكن تقديم import في الملف .d.ts يتسبب في توقفه عن العمل. لا أعرف كيفية حل هذا ، ولكن هذا هو افتقاري إلى معرفة TypeScript التي لم يعد لها أي علاقة بهذا الخطأ.

في ما يلي الحد الأدنى من حالة repro ، باستخدام typecript @ next (الريبو الكامل على https://github.com/yang/sandbox-ts-namespaces-error):

src / a.js: (إشعار ، لا حاجة إلى كلمات رئيسية للاستيراد / التصدير)

module.exports = "hello"; // you could really put anything here, e.g. console.log('hello');

tsconfig.js:

{
  "compilerOptions": {
    "allowJs": true,
    "isolatedModules": true,
    "noEmit": true,
    "strict": true
  },
  "include": ["src"]
}

خطأ:

$ ./node_modules/.bin/tsc
src/a.js:1:1 - error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.

1 module.exports = "hello";
  ~~~~~~


Found 1 error.

لقد صادفت هذا أيضًا لأول مرة عبر create-react-app --typescript ، والذي يرشدك إلى إنشاء setupProxy.js (أو setupTests.js). تحدد CRA أيضًا isolatedModules و allowJs على true. يبدو أنها لم تكن مشكلة حتى إصدار أحدث من الكتابة المطبوعة (لم أشاهد أخطاء حول setupProxy.js أثناء الكتابة على 3.1.x ، فقط بعد التحديث إلى 3.2.x أو 3.3.x).

يعمل الحل البديل لإضافة ملفات .js إلى مجموعة الاستثناءات الخاصة بك عند تشغيل tsc ، ولكن - بشكل مزعج - ما زلت ترى أخطاء من تلك الملفات في برامج التحرير من خدمة لغة TS (جربت كل من VS Code و Webstorm). (يبدو أن هذه مشكلة منفصلة وأكثر عمومية مع خدمة لغة TS التي لا تحترم المستبعدين - لكنني لم أتمكن من العثور على مشكلة حالية لذلك.) لإخفاء هذا الخطأ في المحررين ، أضفت ملفات .d.ts لملفات * .js.

علاوة على ذلك ، يؤدي طلب ملفات .js أو استيرادها إلى جعل الاستثناء غير فعال أيضًا ، مما يتسبب في ظهور الخطأ (خارج المحرر).

يبدو أن تعطيل allowJs فقط (مقابل ما يقترحه تطبيق create-react-app) يعمل معي.

أستمر في الحصول على هذا الخطأ لموظف الويب الخاص بي.

لقد حاولت استبعاد الملف أو المجلد الفردي وهو لا يعمل بالنسبة لي.

ألا توجد طريقة لتجاوز إعداد الوحدات المعزولة ، فإن CRA تحافظ على إعادة كتابة tsconfig.json.

أي اقتراحات أخرى؟

jamespfarrell ضع export {}; في مكان ما في ملفك.

Macil شكرا على نصيحتك.

تلقيت هذا الخطأ:

تمت محاولة خطأ استيراد: "./workers/HeartBeat.worker.js" لا يحتوي على تصدير افتراضي (تم استيراده كـ "HeartBeatWorker").

إذا أضفت:

export default {};

انا حصلت:

خطأ في النوع غير معلوم: _workers_HeartBeat_worker_js__WEBPACK_IMPORTED_MODULE_2 __. الافتراضي ليس مُنشئًا

أليست هناك طريقة لتجاوز هذه "الوحدات المعزولة" إن لم يكن لملف واحد ، حتى بالنسبة لجميع الملفات؟

هذه الأخطاء التي تحصل عليها الآن لا علاقة لها بإعداد الوحدات المعزولة. إذا قمت بإيقاف تشغيل "الوحدات المعزولة" ، فستظل تحصل على هذه الأخطاء.

تمت محاولة خطأ استيراد: "./workers/HeartBeat.worker.js" لا يحتوي على تصدير افتراضي (تم استيراده كـ "HeartBeatWorker").

أين يحدث هذا الخطأ؟ يبدو أنك تحاول استيراد التصدير الافتراضي لملف لا يحتوي على ملف ، مثل import Foo from './workers/HeartBeat.worker.js'; . إذا كنت لا تريد استيراد تصدير افتراضي ، فقم بتغيير سطر الاستيراد إلى import './workers/HeartBeat.worker.js'; .

أنت على حق ، لقد كان شيئًا آخر Macil ! شكر!

_قد يكون لدى شخص آخر نفس المشكلة: _ لقد واجهت نفس الخطأ في الظهور لبعض الملفات التي تركتها كعناصر نائبة بدون محتوى فيها ولكني كنت أستوردها في ملفات أخرى ، على سبيل المثال. كان لدي ملف styles.js فارغ تم استيراده في ملف مكون آخر.

فقط اضف
image

كان لدي هذا الخطأ لتعريف الوحدة النمطية التي قمت بلصقها عن طريق الخطأ .ts بدلاً من .d.ts ، إذا كان أي شخص آخر يرتكب هذا الخطأ بعينه. يجب إعادة تشغيل الخادم بعد الإصلاح.

نفس الخطأ. أنا أستخدم CRA

واجهت هذه القضية على CRA. لقد نسيت ببساطة تصدير أي شيء من الملف:
Снимок экрана от 2019-04-22 22-24-04

لذلك كان لدي هذا الخطأ لأن لدي ملف .js في المجلد الجذر لمشروعي ، في ملف tsconfig.json الخاص بي ، قمت بتكوين هذا:

"compilerOptions": {
    ....
  },
  "include": ["src"],

اضطررت إلى تبديلها لهذا:

"compilerOptions": {
    ....
  },
  "include": ["src/*"],

لقد أصلح ذلك الأمر ، لكنني لا أفهم لماذا ، هل يستطيع أحد أن يشرح لي ذلك؟ كنت أفهم أن تضمين src سيقضي على ملفات الجذر ومجلدات الأشقاء.

thitemple هل حصلت على هذا / * مقتطف من مقال في مكان ما؟ يبدو أن دليل حزمة الويب يشير إلى أن الدليل الأول هو الصحيح. أقوم بتشخيص مشكلة مماثلة ووجدت رسالتك.

@ vort3xxx لم أفعل. لقد رأيت هذا المنشور https://github.com/microsoft/TypeScript/issues/15230#issuecomment -479730947 من DaviSpindola وجربته . هذا كان هو

@ vort3xxx لم أفعل. رأيت هذا المنشور # 15230 (تعليق) من DaviSpindola وجربته . هذا كان هو

نفس المشكلة ، نفس الحل. TS 3.5.2.

تضمين التغريدة

simonbuchan لقد جربت .d.ts لكن ذلك لم ينجح بالنسبة لي أيضًا ، سأقوم بالإبلاغ عن السبب بالضبط ، ولست متأكدًا مما كان عليه. وبالفعل أعادت CRA كتابة هذا الإعداد لي.

مواجهة نفس المشكلة بالضبط. هل سبق لك أن اكتشفت كيفية حل هذا؟ يؤدي تحديد ملفات تعريف .ts أو .d.ts داخل تطبيق إنشاء تفاعل إلى إرجاع الخطأ All files must be modules when the '--isolatedModules flag المقدمة. تعيين العلامة على false أو إزالة خاصية isolatedModules إعادة تعيينها بالكامل إلى true عند بدء إنشاء تطبيق رد الفعل.
تؤدي إضافة export {} إلى أسفل ملف التصريح إلى ظهور الخطأ: Invalid module name in augmentation. Module '...' resolves to an untyped module at '...' .

شخص ما الرجاء المساعدة. كيف أقوم بإضافة ملفات التصريح المخصص إلى مشروع إنشاء تطبيق تفاعل؟

فقط اكتشفت ما إذا كان أي شخص آخر يواجه نفس المشكلة. ما عليك سوى إضافة أنواع تصريحك إلى ملف react-app-env.d.ts في المجلد المصدر عند استخدام إنشاء تطبيق رد فعل.

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