امیر توحیدی
امیر توحیدی
خواندن ۱ دقیقه·۲ سال پیش

نوشتن Declare module برای یک پکیج در typescript

typescript declare module
typescript declare module


یکی از چالش هایی که در استفاده از زبان 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 &quotmongoose&quot 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

به این صورت ادیت کنم

{&quotcompilerOptions&quot:{&quotmodule&quot:&quotcommonjs&quot,&quotesModuleInterop&quot:true,&quotallowSyntheticDefaultImports&quot:true,&quottarget&quot:&quotes2019&quot,&quotnoImplicitAny&quot:true,&quotmoduleResolution&quot:&quotnode&quot,&quotsourceMap&quot:true,&quotoutDir&quot:&quotdist&quot,&quotbaseUrl&quot:&quot.&quot,&quotpaths&quot:{&quot*&quot:[&quotnode_modules/*&quot,&quotsrc/types/*&quot,&quotsrc/*&quot]}},&quotinclude&quot:[&quotsrc/**/*&quot],&quotfiles&quot:[&quotsrc/types/custom.d.ts&quot ,&quotsrc/types/mongoose-history-plug.d.ts&quot ]}

این مواردی که روی نمونه توضیح دادم گفتم شاید به کار دوستان بیاد. :)
اگر مشکلی بود خوشحال میشم برام بنویسید.

جاوا اسکریپتtypescript
امیر توحیدی هستم. برنامه نویس و توسعه دهنده یا هر چیزی که شما بگید. :)
شاید از این پست‌ها خوشتان بیاید