typescript - چگونه JS را در TS با noImplicitAny و بدون allowJs وارد کنیم
من از Webpack و @babel/typescript برای کامپایل یک پروژه ترکیبی از تایپاسکریپت و جاوااسکریپت استفاده میکنم.
من از --noImplicitAny استفاده میکنم تا تشویق به استفاده از تایپینگ شود.
من از --allowJs استفاده نمیکنم چون پروژهام آنقدر بزرگ است که کامپایلر TypeScript را دچار مشکل میکند و همچنین برجستهسازی/Intellisense در Visual Studio را خراب میکند.
برای ماژولهای npm بدون تایپ، اگر وقت نداشته باشم تایپها را اضافه کنم، یک فایل تعریف ایجاد میکنم تا بهطور صریح نوع آن را به any تنظیم کنم. برای مثال
example.ts
import * as elemDataset from 'elem-dataset';
elem-dataset.ts
declare module 'elem-dataset';
این برای کامپایلر رضایتبخش است. اما برای ماژولهای داخلی که هنوز آنها را به TS تبدیل نکردهام...
import * as example from './example2'; // Where example2 is example2.ts
من این خطا را دریافت میکنم:
نتوانست فایل اعلام نوعی برای ماژول './example2' پیدا کند. C:/blah/blah/blah/example2.js به طور ضمنی نوع 'any' را دارد.
من سعی کردهام یک اعلان نوع اضافه کنم، مانند این جواب.
example2.d.ts
declare var example2: any;
declare module "example2" {
export = example2;
}
اما سپس این خطا را دریافت میکنم:
فایل C:/blah/blah/blah/example2.d.ts یک ماژول نیست.
من همچنین declare module '*'; را طبق این پاسخ امتحان کردهام، اما همان خطا را که در بالا بود دریافت کردم.
چطور میتوانم نوع واردات یک فایل JS داخلی را به طور صریح روی any تنظیم کنم؟
پاسخ شماره ۱
مشخص شد که این برای نیازهای من کافی است:
// @ts-ignore
import * as x from './example2';
من ابتدا آن را امتحان نکردم، چون فکر میکردم آن نظر بررسی نوع را برای کل فایل غیرفعال میکند.
اما استفاده از @ts-ignore درست قبل از ایمپورت به من این امکان را میدهد که بررسی نوع را برای بقیه پروژه اعمال کنم در حالی که یک فایل جاوااسکریپت را نادیده میگیرم تا وقتی که زمان داشته باشم آن را تبدیل کنم.
