یکی از چالش هایی که در استفاده از زبان typescript برای reactjs یا nodejs استفاده از پکیج های javascript در این زبان هست
معمولا برای استفاده از این پکیج ها ، پکیج های جاوا اسکریپت معروف با سرچ
@types/package_name
میتونید پیدا کنید . اما برای مواردی که پیدا نمیشه کار سخت میشه اصولابایستی از قابلیت decalare برای این کار استفاده کرد .
به طور مثال من در یه پروژه ای که در حال کار بودم نیاز بود تغییرات هر رکورد در Mongodb ثبت شود.
برای این کار از کتابخانه ای به نام mongoose-history استفاده کنم
البته یه کم و کسری داشت که مجبور شدم یه fork بگیرم خودم کاملش کنم
https://github.com/tohidiamir/mongoose-history
بعد می خواستم پروژه nodejs که داشتم از این کتابخانه که با javascript نوشته شده بود استفاده کنم
برای این کار بایستی یه فایل به این صورت در پروژه درست کنم
mongoose-history-plug.d.ts
و به این صورت توابع و کلاس هایی که داخل این کتابخانه پیاده سازی کرده بودم و استفاده می شد یه جورایی براشون type هاش تعیین کنم که قابل استفاده بشن .
declare module 'mongoose-history-plug' { import type { Schema} from 'mongoose'; import mongoose from "mongoose" export type MetaDataObject = { key : string; value : unknown; } export type MongoosePatchHistoryOptions = { indexes?: Record<string , Record<string, unknown>>; customCollectionName?: string; historyConnection? : mongoose.Connection diffOnly? : boolean, metadata? : MetaDataObject[] customDiffAlgo? : unknown }; export default function ( schema: Schema, options: MongoosePatchHistoryOptions, ): void; }
و برای این که موقع compile کد ها از typescript به جاوااسکریپت از این استفاده شود
بایستی فایل
tsconfig.json
به این صورت ادیت کنم
{"compilerOptions":{"module":"commonjs","esModuleInterop":true,"allowSyntheticDefaultImports":true,"target":"es2019","noImplicitAny":true,"moduleResolution":"node","sourceMap":true,"outDir":"dist","baseUrl":".","paths":{"*":["node_modules/*","src/types/*","src/*"]}},"include":["src/**/*"],"files":["src/types/custom.d.ts" ,"src/types/mongoose-history-plug.d.ts" ]}
این مواردی که روی نمونه توضیح دادم گفتم شاید به کار دوستان بیاد. :)
اگر مشکلی بود خوشحال میشم برام بنویسید.