صف الخلل
لقد استخدمت استيراد الاسم المستعار @/
وقد نجح الأمر. ثم قمت بالتبديل إلى Vite وهو يدعم الأسماء المستعارة الجذر فقط. لذلك قمت بتبديل الكود الخاص بي لاستخدام الأسماء المستعارة /@/
. إنه يجمع ويعمل في المتصفح ، لكنه يعطيني خطأ في vscode:
لإعادة إنتاج
استخدم استيراد /@/
سلوك متوقع
كل شيء يعمل
النظام (يرجى استكمال المعلومات التالية):
سيتعين عليك أيضًا تكوين الاسم المستعار للطباعة على الرغم من tsconfig / jsconfig.json
https://www.typescriptlang.org/docs/handbook/module-resolution.html#path -mapping
أواجه أيضًا نفس المشكلة التي يمكن أن يجمعها tsc
ما يرام. ومع ذلك ، لن تتمكن أدوات مثل svelte-check
من حل مسار الاسم المستعار بشكل صحيح وإلقاء أخطاء مثل OP. يبدو أن هناك خطأ متعلق بـ language-tools
غير قادر على حل tsconfig.json
في مجلد المشروع بشكل صحيح؟
هذا الخطأ لأننا استخدمنا بعض الخصائص الخاصة التي تم حقنها بواسطة svelte2tsx للقيام بفحص نوع المكون. إذا لم نتمكن من العثور على الملف الفعلي ، فلن نتمكن من تحويل الملف باستخدام svelte2tsx.
cayter أين تضع tsconfig الخاص بك؟
@ jasonlyu123 يوجد أدناه بنية مجلد مشروعي والتي تصادف أنها monorepo لكل من الواجهة الخلفية / الواجهة الأمامية:
.
├── Makefile
├── README.md
├── database
│ └── database.rules.json
├── firebase.json
├── firestore
│ ├── firestore.indexes.json
│ └── firestore.rules
├── functions // backend code
│ ├── package-lock.json
│ ├── package.json
│ ├── src
│ │ └── index.ts
│ └── tsconfig.json
├── hosting // frontend PWA code
│ ├── ...
│ ├── src
│ │ ├── components
│ │ │ ├── App.svelte
│ │ │ └── ...
│ │ ├── images
│ │ │ ├── cover.png
│ │ │ └── ...
│ │ ├── index.css
│ │ ├── index.ts
│ │ ├── pages
│ │ │ ├── Auth
│ │ │ │ └── ...
│ │ │ ├── Error
│ │ │ │ └── ...
│ │ │ ├── Home
│ │ │ │ └── ...
│ │ │ └── User
│ │ │ └── ...
│ │ └── stores
│ │ └── ...
│ ├── svelte.config.js
│ ├── tailwind.config.js
│ ├── tsconfig.json
│ ├── vite.config.ts
│ └── workbox.config.js
├── package-lock.json
└── package.json
استضافة / tsconfig.json
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"baseUrl": "src",
"declaration": true,
"emitDecoratorMetadata": true,
"esModuleInterop": true,
"experimentalDecorators": true,
"forceConsistentCasingInFileNames": true,
"importHelpers": true,
"importsNotUsedAsValues": "error",
"isolatedModules": true,
"lib": ["dom", "esnext", "es6"],
"module": "esnext",
"moduleResolution": "node",
"noEmit": true,
"noImplicitAny": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"rootDir": "src",
"skipLibCheck": true,
"sourceMap": true,
"strict": true,
"strictBindCallApply": true,
"strictFunctionTypes": true,
"strictPropertyInitialization": true,
"strictNullChecks": true,
"target": "esnext",
"types": ["jest", "node", "svelte"],
"paths": {
"/@/*": ["*"]
}
},
"include": ["src/**/*"],
"exclude": ["node_modules/*", "public/*"]
}
إذا لم نتمكن من العثور على الملف الفعلي ، فلن نتمكن من تحويل الملف باستخدام svelte2tsx.
نعم ، هذا يتعلق بحل مسار الاسم المستعار المحدد في tsconfig.json
للمشروع لم يتم تكريمه. لذلك ، إذا قمنا بتغييره إلى مسار نسبي بدلاً من استخدام مسار الاسم المستعار ، فلن يؤدي امتداد vscode وفحص svelte إلى ظهور أي خطأ بعد الآن يمكنك رؤيته من لقطة شاشة OP للمكون ComboBox
.
يمكنك التحقق من قناة الإخراج من vscode ، اختر svelte في القائمة المنسدلة على اليمين. ومعرفة ما إذا كان لديك شيء من هذا القبيل
Initialize new ts service at c:/Current Projects/svelte-app/tsconfig.json
وانشر السجل هنا.
يمكنني إعادة إنتاج هذا. لسبب ما ، يمكن أن يتعامل getDefinitionAndBoundSpan
مع ملفات TS / JS المستوردة من هذه المواقع ، ولكن ليس مع ملفات .svelte
.
تكمن المشكلة داخل module-loader
، الذي يفوض إلى دقة TS العادية لأن التحقق من "هو المسار المطلق" صحيح (مسارات الملفات التي تبدأ بـ /
مطلقة في نظام linux). أعتقد أننا بحاجة إلى فحوصات إضافية لـ "هل هذا جزء من البادئة من مسارات tsconfig".
قال OP في الواقع إنه يعمل مع @/
وقد فاتني ذلك. آسف 😅
لقد نسيت أن أقول كم أنت رائع يا رفاق. شكرا للاستجابة السريعة
التعليق الأكثر فائدة
تكمن المشكلة داخل
module-loader
، الذي يفوض إلى دقة TS العادية لأن التحقق من "هو المسار المطلق" صحيح (مسارات الملفات التي تبدأ بـ/
مطلقة في نظام linux). أعتقد أننا بحاجة إلى فحوصات إضافية لـ "هل هذا جزء من البادئة من مسارات tsconfig".