این commit به هیچ شعبه ای در این مخزن تعلق ندارد و ممکن است به یک فورک خارج از مخزن تعلق داشته باشد.
نام در حال حاضر استفاده شده است
یک برچسب از قبل با نام شعبه ارائه شده وجود دارد. بسیاری از دستورات Git هر دو نام برچسب و شاخه را می پذیرند، بنابراین ایجاد این شاخه ممکن است باعث رفتار غیرمنتظره شود. آیا مطمئن هستید که می خواهید این شعبه را ایجاد کنید؟
از Git یا Checkout با SVN با استفاده از URL وب استفاده کنید.
با CLI رسمی ما سریع کار کنید. بیشتر بدانید.
ورود به سیستم لازم
برای استفاده از Codespace لطفا وارد شوید.
راه اندازی دسکتاپ GitHub
اگر اتفاقی نیفتاد، GitHub Desktop را دانلود کنید و دوباره امتحان کنید.
راه اندازی دسکتاپ GitHub
اگر اتفاقی نیفتاد، GitHub Desktop را دانلود کنید و دوباره امتحان کنید.
راه اندازی Xcode
اگر اتفاقی نیفتاد، Xcode را دانلود کنید و دوباره امتحان کنید.
راه اندازی کد ویژوال استودیو
پس از آماده شدن فضای کد شما باز می شود.
مشکلی در تهیه فضای کد شما وجود داشت، لطفاً دوباره امتحان کنید.
آخرین ارتکاب
آمار Git
فایل ها
آخرین اطلاعات commit بارگیری نشد.
README. md
مخزن تعاریف نوع TypeScript با کیفیت بالا.
این بخش سلامت مخزن و فرآیند انتشار را دنبال می کند. ممکن است برای مشارکت کنندگانی که مشکلاتی را در رابطه با روابط عمومی و بسته های خود تجربه می کنند مفید باشد.
- جدیدترین ساخت به صورت کاملاً بررسی شده/چک شده است:
- همه بسته ها در typescript@next به طور تمیز تایپ می شوند/چک می شوند:
- همه بسته ها در کمتر از یک ساعت و نیم به npm منتشر می شوند: در Definitely Typed فعال بوده است
- به روز رسانی وضعیت زیرساخت فعلی
اگر چیزی در اینجا اشتباه به نظر می رسد، یا هر یک از موارد بالا ناموفق است، لطفاً در کانال Definitely Typed در سرور TypeScript Community Discord به ما اطلاع دهید.
فایل های اعلامیه چیست و چگونه آنها را دریافت کنم؟
این روش ترجیحی است. مثلا:
سپس انواع باید به طور خودکار توسط کامپایلر گنجانده شوند. اگر از ماژول ها استفاده نمی کنید، ممکن است لازم باشد یک مرجع انواع اضافه کنید:
بیشتر را در دفترچه راهنما ببینید.
برای بسته npm "foo"، تایپ کردن برای آن در "@types/foo" خواهد بود. اگر نمی توانید بسته خود را پیدا کنید، آن را در TypeSearch جستجو کنید.
اگر هنوز نتوانستید آن را پیدا کنید، بررسی کنید که آیا تایپ های خودش را دسته بندی می کند یا خیر. این معمولاً در فیلد «types» یا «typings» در package. json ارائه می شود، یا فقط به دنبال فایل های «. d. ts» در بسته بگردید و به صورت دستی آنها را با یک /// اضافه کنید.
Definitely Typed فقط بسته هایی را روی نسخه های TypeScript که کمتر از ۲ سال قدمت دارند آزمایش می کند.
در حال حاضر نسخه 4. 1 به بالا تست شده است.
اگر از TypeScript 2. 0 تا 4. 0 استفاده می کنید ، هنوز هم می توانید بسته های Types را نصب کنید - اکثر بسته ها از ویژگی های جدید نسخه جدید استفاده نمی کنند. اما هیچ تضمینی برای کار آنها وجود ندارد. در اینجا پنجره پشتیبانی است:
بسته های Types دارای برچسب هایی برای نسخه های Typescript هستند که صریحاً از آنها پشتیبانی می کنند ، بنابراین معمولاً می توانید نسخه های قدیمی تر از بسته هایی را که از پنجره 2 ساله پیش بینی می کنند دریافت کنید. به عنوان مثال ، اگر NPM Dist-Tags@Types/React را اجرا کنید ، می بینید که TypeScript 2. 5 می تواند از انواع برای react@16. 0 استفاده کند ، در حالی که TypeScript 2. 6 و 2. 7 می توانند از انواع برای react@16. 4 استفاده کنند:
| نشان | نسخه |
|---|
| آخرین | 16. 9. 23 |
| TS2. 0 | 15. 0. 1 |
| . | . |
| TS2. 5 | 16. 0. 36 |
| TS2. 6 | 16. 4. 7 |
| TS2. 7 | 16. 4. 7 |
| . | . |
- به صورت دستی از شعبه اصلی این مخزن بارگیری کنید و آنها را در پروژه خود قرار دهید
- تایپی ها (از گزینه های ترجیحی استفاده کنید ، تایپ ها از بین می روند)
- nuget (استفاده از گزینه های ترجیحی ، انتشارات نوع Nuget DT خاموش شده است)
شاید لازم باشد منابع دستی را اضافه کنید.
چگونه می توانم مشارکت کنم؟
قطعاً تایپ شده فقط به دلیل مشارکت کاربرانی مانند شما کار می کند!
قبل از اینکه پیشرفت خود را با جهان به اشتراک بگذارید ، با ایجاد یک پرونده typename. d. ts در پروژه خود و پر کردن صادرات آن ، از انواع خود استفاده کنید:
ویرایش یک بسته موجود
می توانید انواع را به طور مستقیم در node_modules/@types/foo/index. d. ts ویرایش کنید تا تغییرات خود را تأیید کنید ، سپس با مراحل زیر تغییرات را در این repo وارد کنید.
از طرف دیگر ، شما می توانید از تقویت ماژول برای گسترش انواع موجود از ماژول DT استفاده کنید یا از تکنیک ماژول Deckare در بالا استفاده کنید که نسخه را در node_modules غلبه می کند.
اضافه کردن تست به یک بسته جدید
به tsconfig. json خود اضافه کنید:
انواع/foo/index. d. ts حاوی اعلامیه هایی برای ماژول "foo" ایجاد کنید. اکنون باید بتوانید از "foo" در کد خود وارد کنید و به تعریف نوع جدید بروید. سپس کد را بسازید و اجرا کنید تا مطمئن شوید که تعریف نوع شما در واقع با آنچه در زمان اجرا اتفاق می افتد مطابقت دارد.
هنگامی که تعاریف خود را با کد واقعی آزمایش کردید ، یک روابط عمومی انجام دهید ، سپس دستورالعمل های ویرایش یک بسته موجود یا ایجاد یک بسته جدید را دنبال کنید.
درخواست کشش کنید
پس از آزمایش بسته خود ، می توانید آن را به طور قطع تایپ کنید.
ابتدا این مخزن را چنگ بزنید ، آن را کلون کنید ، گره را نصب کنید و NPM را نصب کنید. در صورت استفاده از NPM V7 ، باید پرچم-Legacy-Peer-Deps را به دستور اضافه کنید.
ما از یک ربات استفاده می کنیم تا تعداد زیادی از درخواست های کشش را به طور قطع به صورت کامل به صورت سلف سرویس انجام دهیم. می توانید اطلاعات بیشتر در مورد دلیل و چگونگی اینجا بخوانید. در اینجا یک مرجع مفید نشان می دهد که چرخه زندگی درخواست کشش به DT را نشان می دهد:
شما می توانید طبق معمول کل مخزن را کلون کنید ، اما بزرگ است و شامل یک فهرست عظیم از بسته های نوع است.
شما می توانید طبق معمول کل مخزن را کلون کنید ، اما بزرگ است و شامل یک فهرست عظیم از بسته های نوع است. این کار مدتی طول خواهد کشید تا کلون شود و ممکن است غیر ضروری ناخوشایند باشد.
برای یک کلون قابل کنترل تر که فقط بسته های نوع مربوط به شما را شامل می شود ، می توانید از ویژگی های پراکنده ، فیلتر و عمق Git استفاده کنید. این باعث کاهش زمان کلون و بهبود عملکرد GIT می شود.
⚠ این امر به حداقل نسخه GIT 2. 27. 0 نیاز دارد ، که احتمالاً جدیدتر از پیش فرض در اکثر دستگاه ها است. روشهای پیچیده تر در نسخه های قدیمی در دسترس است ، اما تحت پوشش این راهنما نیست.
- Git Clone - -pars e-فیلتر = حباب: هی چ-عمق = 1
- --SPARSE فایل بررسی پراکنده را آغاز می کند ، بنابراین فهرست کار فقط با پرونده های موجود در ریشه مخزن شروع می شود.
- -فیلتر = Blob: هیچکدام پرونده ها را حذف نمی کنند و فقط در صورت لزوم آنها را واگذار می کنند.
- -عمق = 1 با کوتاه کردن تاریخ تعهد ، سرعت کلون را بیشتر بهبود می بخشد ، اما ممکن است باعث ایجاد مشکلاتی شود که در اینجا خلاصه شده است.
- git پراکنده چک اضافه کردن انواع/ انواع/.
یک بسته موجود را ویرایش کنید
- انواع CD/
- تغییراتی ایجاد کنید. به یاد داشته باشید که تست ها را ویرایش کنید. اگر تغییرات شکستن را ایجاد می کنید ، نسخه اصلی را به روز نکنید. بشر
هنگامی که یک PR را برای ویرایش یک بسته موجود ایجاد می کنید ، DT-BOT باید نویسندگان قبلی را به دست آورد. اگر اینگونه نباشد ، می توانید خودتان در اظهار نظر مرتبط با روابط عمومی این کار را انجام دهید.
یک بسته جدید ایجاد کنید
اگر شما نویسنده کتابخانه هستید و بسته شما به صورت TypeScript نوشته شده است ، به جای انتشار ، پرونده های اعلامیه خودکار را در بسته خود بسته بندی کنید تا قطعاً تایپ شود.
اگر در حال اضافه کردن تایپ برای یک بسته NPM هستید ، یک دایرکتوری با همین نام ایجاد کنید. اگر بسته ای که در حال اضافه کردن تایپ برای آن هستید در NPM نیست ، حتماً نامی که برای آن انتخاب کرده اید با نام بسته در NPM مغایرت ندارد.(می توانید از اطلاعات NPM برای بررسی وجود بسته استفاده کنید.)
بسته شما باید این ساختار را داشته باشد:
| فایل | هدف |
|---|
| index. d. ts | این شامل تایپ های بسته است. |
| -tests. ts | این شامل کد نمونه است که تایپ ها را آزمایش می کند. این کد اجرا نمی شود ، اما نوع چک است. |
| tsconfig. json | این به شما امکان می دهد TSC را درون بسته اجرا کنید. |
| tslint. json | لینت را فعال می کند. |
| . eslintrc. json | (به ندرت) فقط برای غیرفعال کردن قوانین خطی که برای ESLINT نوشته شده بود ، لازم بود. |
اگر شما NPM ≥ 5. 2. 0 ، NPM نص ب-G DTS-GEN و DTS-GEN-DT--NAME-ماژول را در غیر این صورت ، تولید کنید. همه گزینه ها را در DTS-GEN مشاهده کنید.
اگر پرونده های . d. ts را علاوه بر index. d. ts دارید ، اطمینان حاصل کنید که آنها به صورت index. d. ts یا تست ها ارجاع شده اند.
قطعاً اعضای تایپ شده به طور معمول برای PR های جدید نظارت می کنند ، اگرچه به خاطر داشته باشید که تعداد سایر PRS ممکن است همه چیز را کاهش دهد.
برای یک بسته مثال خوب ، به Base64-JS مراجعه کنید.
حذف یک بسته
هنگامی که یک بسته انواع خاص خود را بسته بندی می کند ، برای جلوگیری از سردرگمی ، انواع باید از آن جدا شود.
- : این نام دایرکتوری برای حذف است.
- : یک خرد خرد شده به @types/ با این نسخه منتشر می شود. باید بالاتر از نسخه های منتشر شده در حال حاضر باشد و باید نسخه ای از NPM باشد.
- : نام بسته NPM که جایگزین انواع قطعاً تایپ شده است. معمولاً این یکسان است ، در این صورت می توانید آن را حذف کنید.
هر بسته دیگری که به طور قطع تایپ شده است که به بسته حذف شده اشاره شده است باید برای مراجعه به انواع بسته بندی شده به روز شود. می توانید با دیدن خطاهای موجود در NPM Run Test-All ، این لیست را دریافت کنید. برای رفع خطاها ، یک بسته را با "وابستگی" اضافه کنید:< "": "x.y.z" >بشرمثلا:
هنگامی که یک بسته را به وابستگان اضافه می کنید ، باید یک PR را نیز باز کنید تا به PackageJsondEntendensies. txt در Tools ExitereTyped اضافه کنید.
اگر یک بسته هرگز به طور قطع تایپ نشده بود ، نیازی به اضافه شدن به no t-neededpackages. json نیست.
تغییرات خود را با اجرای تست NPM آزمایش کنید که نام بسته شما کجاست.
این اسکریپت از DTSLINT برای اجرای کامپایلر TypeScript در برابر پرونده های DTS خود استفاده می کند.
هنگامی که تمام تغییرات خود را آماده کردید ، از NPM Run Test-All استفاده کنید تا ببینید که چگونه تغییرات شما بر سایر ماژول ها تأثیر می گذارد.
اگر در حال اضافه کردن تایپ برای یک بسته NPM هستید ، یک دایرکتوری با همین نام ایجاد کنید. اگر بسته ای که در حال اضافه کردن تایپ برای آن هستید در NPM نیست ، حتماً نامی که برای آن انتخاب کرده اید با نام بسته در NPM مغایرت ندارد.(می توانید از اطلاعات NPM برای بررسی وجود بسته استفاده کنید.)
اگر یک بسته غیر NPM با یک بسته NPM موجود مغایرت دارد ، سعی کنی د-Browser را به انتهای نام اضافه کنید ت ا-Browser دریافت کنید.
باید یک پروند ه-tests. ts وجود داشته باشد ، که پرونده تست شما در نظر گرفته می شود ، به همراه هر پرونده *. ts که وارد می شود. اگر هیچ فایل آزمایشی را در پوشه ماژول مشاهده نمی کنید ، ی ک-tests. ts ایجاد کنید. این پرونده ها برای اعتبارسنجی API صادر شده از پرونده های *. d. ts که به صورت @types ارسال می شوند ، استفاده می شود.
تغییر در پرونده های *. d. ts باید شامل تغییر پرونده مربوط به *باشد که نشان می دهد API مورد استفاده قرار می گیرد ، به طوری که شخصی به طور تصادفی کد شما را نمی شکند. اگر هیچ فایل آزمایشی را در پوشه ماژول مشاهده نمی کنید ، ی ک-tests. ts ایجاد کنید
به عنوان مثال ، این تغییر در یک عملکرد در یک پرونده . d. ts اضافه کردن یک پارامتر جدید به یک تابع:
اگر تعجب می کنید که از کجا باید با کد آزمون شروع کنید ، نمونه های موجود در README ماژول مکانی عالی برای شروع است.
می توانید تغییرات خود را با آزمون NPM از ریشه این repo تأیید کنید ، که پرونده های تغییر یافته را در نظر می گیرد.
از $ انتظار استفاده کنید تا ادعا کنید که یک عبارت از یک نوع معین است ، و @TS-Expect-Error برای ادعا که یک خطای کامپایل است. مثال ها:
برای اطلاعات بیشتر ، به DTSLINT README مراجعه کنید.
پرونده پیکربندی Linter ، tslint. json باید حاوی باشد< "extends": "@definitelytyped/dtslint/dt.json" >، و هیچ قانون اضافی
اگر بنا به دلایلی برخی از قانون ها باید غیرفعال شوند ، آن را برای آن خط خاص با استفاده از // tslint غیرفعال کنید: غیرفعال کردن- next-line: [rulename]-نه برای کل بسته ، تا غیرفعال کردن قابل بررسی باشد.(برخی از پیکربندی های خط میراث وجود دارد که محتویات اضافی دارند ، اما این موارد نباید در کار جدید اتفاق بیفتد.)
قطعاً تایپ شده در حال جابجایی به Eslint برای لینت است. بر خلاف TSLINT ، برای فعال کردن لینت نیازی به فایل پیکربندی ندارید. مانند TSLINT ، شما باید قوانین خاص را فقط در خطوط خاص غیرفعال کنید:
شما هنوز هم می توانید قوانین را با یک . eslintrc. json غیرفعال کنید ، اما نباید در بسته های جدید باشد.
tsconfig. json باید دارای nomplicitany ، noimplicititis ، strictnullchecks و strictfunctiontypes باشد.
شما می توانید tsconfig. json را ویرایش کنید تا پرونده های تست جدید اضافه کنید ، "هدف" را اضافه کنید: "ES6" (برای توابع async لازم است) ، برای افزودن به "lib" یا اضافه کردن گزینه کامپایلر "JSX".
TL ؛ DR: EsmoduleInterop و AllowsyntheticDefaultImports در tsconfig. json شما مجاز نیست.
این گزینه ها امکان نوشتن واردات پیش فرض برای صادرات CJS را فراهم می کند ، و مدل سازی قابلیت همکاری داخلی بین ماژول های CJS و ES در گره و در برخی از دسته های JS را می دهد:
از آنجا که اعتبار زمان کامپایل واردات در index. d. ts به تنظیمات خاص تدوین بستگی دارد ، که کاربران انواع شما به ارث نمی برند ، با استفاده از این الگوی به طور قطع ، کاربران را وادار می کند تا تنظیمات تدوین خود را تغییر دهند ، که ممکن است نادرست باشدبرای زمان اجرا آنهادرعوض ، شما باید برای صادرات CJS واردات CJS را بنویسید تا از سازگاری گسترده و مستقل از پیکربندی اطمینان حاصل شود:
معمولاً به این احتیاج نخواهید داشت. ناشر بسته قطعاً بسته بندی شده برای بسته هایی که هیچ وابستگی خارج از آن وجود ندارد ، یک بسته ایجاد می کند. یک بسته ممکن است برای مشخص کردن وابستگی هایی که سایر بسته های types نیستند ، گنجانده شود. Pikaday نمونه خوبی است. حتی اگر بسته خود را بنویسید. json ، فقط می توانید وابستگی ها را مشخص کنید. زمینه های دیگر مانند "توضیحات" مجاز نیست. همچنین باید وابستگی را به لیست بسته های مجاز اضافه کنید. این لیست توسط یک انسان به روز می شود ، که این فرصت را به ما می دهد تا اطمینان حاصل کنیم که بسته های Types به بسته های مخرب بستگی ندارند.
در مورد نادر که یک بسته types حذف شده و به نفع انواع ارسال شده توسط بسته منبع حذف شده و باید به بسته قدیمی و حذف شده وابسته باشید ، می توانید به یک بسته types وابستگی اضافه کنید. حتماً هنگام افزودن به لیست بسته های مجاز ، این موضوع را توضیح دهید تا نگهدارنده انسان بداند چه اتفاقی می افتد.
اگر یک پرونده در index. d. ts آزمایش نشده و ارجاع نشده است ، آن را به پرونده ای به نام other_files. txt اضافه کنید. این پرونده لیستی از پرونده های دیگر است که باید در بسته Typings ، یک پرونده در هر خط گنجانده شود.
- ابتدا توصیه های کتاب را دنبال کنید.
- قالب بندی: از 4 فاصله استفاده کنید. Prettier در این repo تنظیم شده است ، بنابراین می توانید NPM Run Run را اجرا کنید - -Write Path/to/pack/**/*. ts. هنگام استفاده از ادعاها ، // prettier-jectubuse را به علامت گذاری خط (های) کد اضافه کنید که از قالب بندی مستثنی است:
TL ؛ DR: تغییر دهید . github/codeowners ، همیشه لیست صاحبان را در index. d. ts تغییر دهید
DT مفهوم "صاحبان تعریف" را دارد که افرادی هستند که می خواهند کیفیت انواع یک ماژول خاص را حفظ کنند
- اضافه کردن خود به لیست باعث می شود هر زمان که کسی درخواست کشش کند یا در مورد بسته ، درخواست کند ، به شما اطلاع داده شود (از طریق نام کاربری GitHub).
- بررسی های روابط عمومی شما از اهمیت بیشتری برای ربات برخوردار خواهد بود که این repo را حفظ می کند.
- نگهدارنده های DT برای اطمینان از یک سیستم زیست محیطی پایدار ، به صاحبان تعریف اعتماد می کنند ، لطفاً خود را به آرامی اضافه نکنید.
برای اضافه کردن خود به عنوان یک مالک تعریف:
- اضافه کردن نام خود به انتهای خط ، مانند // تعاریف توسط: آلیس ، باب.
- یا اگر تعداد بیشتری از افراد وجود داشته باشد ، می تواند چند لایه باشد
یک بار در هفته ، صاحبان تعریف با پرونده همگام می شوند. GitHub/CodeOwners که منبع حقیقت ما است.
رابطه بین این مخزن و بسته های types در NPM دقیقاً چیست؟
شعبه مستر به لطف Tools قطعاً Typed به طور خودکار در NPM به دامنه Types منتشر می شود.
من درخواست کشش ارسال کرده ام. چه مدت تا زمانی که ادغام شود؟
این بستگی دارد ، اما بیشتر درخواست های کشش طی یک هفته ادغام می شوند. برخی از روابط عمومی را می توان توسط صاحبان یک ماژول ادغام کرد و می توان آنها را خیلی سریعتر ادغام کرد. تقریباً:
PR هایی که فقط انواع یک ماژول را تغییر می دهند و تغییرات مربوط به تست دارند بسیار سریعتر ادغام می شوند
PR هایی که توسط یک نویسنده ذکر شده در هدر تعریف تأیید شده است ، معمولاً سریعتر ادغام می شوند. PRS برای تعاریف جدید زمان بیشتری را به خود اختصاص می دهد زیرا نیاز به بررسی بیشتر از نگهبانان دارد. هر PR قبل از ادغام توسط یک Typescript یا قطعاً عضو تیم تایپ شده بررسی می شود ، بنابراین لطفاً صبور باشید زیرا عوامل انسانی ممکن است باعث تاخیر شود. هیئت مدیره وضعیت درخواست Pull New را بررسی کنید تا پیشرفت را در حالی که نگهدارنده از طریق PRS باز کار می کند ، ببینید.
من می خواهم تغییری را به یک پروژه بسیار محبوب ارائه دهم ، چرا با آنها متفاوت رفتار می شود؟
برای تغییر در ماژول های بسیار محبوب ، به عنوان مثالNode/Express/Jest که در هر هفته میلیون ها بارگیری در هر هفته در NPM وجود دارد ، الزامات مربوط به کمک ها کمی بیشتر است. تغییر در این پروژه ها می تواند اثرات اکوسیستم گسترده ای داشته باشد ، بنابراین ما با مراقبت های زیادی با تغییرات در آنها رفتار می کنیم. این ماژول ها هم نیاز به ثبت نام از یک نگهدارنده DT دارند و هم پشتیبانی مشتاق صاحبان ماژول. نوار برای عبور از این می تواند بسیار زیاد باشد ، و اغلب PRS می تواند بی نظیر باشد زیرا قهرمان نیست. اگر می بینید که هیچ کس مرتکب نیست ، سعی کنید روابط عمومی خود را تمرکز کنید.
روابط عمومی من ادغام شده است. چه زمانی بسته NPM Types به روز می شود؟
بسته های NPM باید طی چند دقیقه به روز شوند. اگر بیش از یک ساعت گذشته است ، شماره PR را در کانال قطعاً تایپ شده در سرور Typescript Community Discord ذکر کنید و نگهدارنده فعلی عضو تیم صحیح را برای بررسی دریافت می کند.
من در حال نوشتن تعریفی هستم که به تعریف دیگری بستگی دارد. آیا باید استفاده کنم یا واردات؟
اگر ماژول مورد نظر شما یک ماژول خارجی است (از صادرات استفاده می کند) ، از واردات استفاده کنید. اگر ماژولی که شما به آن مراجعه می کنید یک ماژول محیط است (از ماژول Declare استفاده می کند ، یا فقط Globals را اعلام می کند) ، استفاده کنید.
برخی از بسته ها هیچ tslint. json ندارند ، و برخی از tsconfig. json "noimplicitany" را از دست داده اند: درست ، "noimplicititis": واقعی ، یا "strictnullchecks": درست است.
سپس آنها اشتباه می کنند ، و ما هنوز متوجه نشده ایم. با ارسال درخواست کشش برای رفع آنها می توانید کمک کنید.
آیا می توانم تنظیمات قالب بندی را برای ماژول ها تغییر دهم/اجرا کنم؟
نه. ما سعی کرده ایم که قبلاً با فرمت کد DT سازگار باشد اما به دلیل فعالیت زیاد در repo به بن بست رسیده ایم. ما شامل تنظیمات قالب بندی از طریق یک . editorconfig و . prettierrc. json هستیم. اینها منحصراً برای ابزارآلات در ویرایشگر شما هستند ، تنظیمات آنها مغایرت ندارد و ما قصد تغییر آنها را نداریم. ما همچنین قصد داریم یک سبک خاص را در repo اجرا کنیم. ما می خواهیم موانع مشارکت را کم نگه داریم.
آیا می توانم تعریفی را درخواست کنم؟
در مورد تعاریف نوع برای DOM چیست؟
اگر انواع آنها بخشی از یک استاندارد وب باشد ، باید آنها را به ژنراتور Typescript-dom-lib کمک کنند تا بتوانند بخشی از پیش فرض lib. dom. d. ts شوند.
آیا باید یک فضای نام خالی را به بسته ای اضافه کنم که ماژول ای را برای استفاده از واردات سبک ES6 صادر نمی کند؟
برخی از بسته ها ، مانند Chai-HTTP ، یک تابع را صادر می کنند.
وارد کردن این ماژول با وارد کردن سبک ES6 در فرم واردات * به عنوان foo از "foo" ؛منجر به خطا می شود:
Error TS2497: ماژول "FOO" به یک نهاد غیر ماژول حل می شود و با استفاده از این سازه نمی توان وارد کرد
این خطا را می توان با ادغام اعلامیه عملکرد با یک نام خالی از همین نام سرکوب کرد ، اما این عمل دلسرد می شود. این یک پاسخ سرریز پشته معمولاً در مورد این موضوع است.
وارد کردن ماژول با استفاده از Import foo = نیاز ("foo") مناسب تر است. نحو. با این وجود ، اگر می خواهید از واردات پیش فرض مانند واردات foo از "foo" استفاده کنید. شما دو گزینه دارید:
- اگر زمان اجرا ماژول شما از یک طرح interop برای ماژول های غیر اسکریپت پشتیبانی می کند ، می توانید از گزینه کامپایلر-allowsyntheticdefaultimports استفاده کنید ، یعنی اگر واردات پیش فرض در محیط شما کار می کند (به عنوان مثال وب ، systemjs ، esm).
- اگر می خواهید TypeScript از Interop غیر اسکریپت مراقبت کند (از آنجا که TypeScript 2. 7).
یک بسته از Export = ، اما من ترجیح می دهم از واردات پیش فرض استفاده کنم. آیا می توانم صادرات = را برای صادرات پیش فرض تغییر دهم؟
مانند سؤال قبلی ، به استفاده از گزینه های کامپایل ر-allowsyntheticdefaultimports ی ا-moduleinterop مراجعه کنید.
اگر دقیق باشد ، تعریف نوع را تغییر ندهید. برای یک بسته NPM ، صادرات = دقیق است اگر Nod e-p 'نیاز به ("foo") برای وارد کردن یک ماژول کار کند ، و در صورت نیاز گر ه-p "(" foo ") به طور پیش فرض دقیق است. مدول.
من می خواهم از ویژگی های نسخه های بسیار جدید استفاده کنم.
سپس باید نظر خود را به آخرین خط هدر تعریف خود اضافه کنید (بعد از // تعاریف: https://github.com/definientytyped/definitytyped): // حداقل نسخه نسخه: X. Y. با این کار کمترین نسخه پشتیبانی شده را تعیین می کند.
با این حال ، اگر پروژه شما نیاز به حفظ انواع سازگار با ، مثلاً 3. 7 و بالاتر همزمان با انواع مختلفی که با 3. 6 یا پایین سازگار هستند ، باید از ویژگی TypesVersions استفاده کنید. می توانید توضیح مفصلی در مورد این ویژگی در مستندات رسمی TypeScript پیدا کنید.
در اینجا یک مثال کوتاه برای شروع کار آورده شده است:
شما باید یک پرونده Package. json را به تعریف بسته خود اضافه کنید ، با مطالب زیر:
زیر کارگردانی ذکر شده در قسمت TypesVersions را در داخل فهرست انواع خود ایجاد کنید (در این مثال TS3. 6/. TS3. 6/ از نسخه های TypeScript 3. 6 و پایین پشتیبانی می کند ، بنابراین انواع و آزمایش های موجود را در آنجا کپی کنید.
شما باید هدر Definition را از TS3. 6/index. d. ts حذف کنید زیرا فقط reoot index. d. ts قرار است آن را داشته باشد.
گزینه های پایه و typeroots را در TS3. 6/tsconfig. json تنظیم کنید ، که باید چیزی شبیه به این باشد:
در ریشه بسته ، ویژگی های TypeScript 3. 7 را که می خواهید استفاده کنید اضافه کنید. هنگامی که افراد بسته را نصب می کنند ، TypeScript 3. 6 و پایین از TS3. 6/index. d. ts شروع می شود ، در حالی که TypeScript 3. 7 و بالاتر از index. d. ts شروع می شود.
برای مثال می توانید به Bluebird نگاه کنید.
من می خواهم یک API DOM اضافه کنم که به طور پیش فرض در TypeScript موجود نیست.
این ممکن است در ژنراتور Typescript-dom-lib باشد. دستورالعمل ها را در آنجا مشاهده کنید. اگر استاندارد هنوز پیش نویس باشد ، در اینجا تعلق دارد. از یک نام با Dom- استفاده کنید و پیوندی به استاندارد را به عنوان پیوند "پروژه" در هدر درج کنید. هنگامی که فارغ التحصیل حالت پیش نویس است ، ممکن است آن را از بسته بندی شده و بسته بندی شده types به طور قطع تایپ کرده و از بین ببریم.
چگونه نسخه های بسته بندی شده به طور قطع با نسخه های کتابخانه مربوطه ارتباط دارند؟
توجه: بحث در این بخش آشنایی با نسخه معنایی را فرض می کند
هر بسته قطعاً تایپ شده هنگام انتشار در NPM ، نسخه ای می شود. TOOLS قطعاً Typed (ابزاری که بسته های Types را به NPM منتشر می کند) نسخه بسته اعلامیه را با استفاده از شماره نسخه major. minor ذکر شده در خط اول پرونده index. d. ts خود تنظیم می کند. به عنوان مثال ، در اینجا چند خط اول اعلامیه های نوع گره برای نسخه 10. 12. x در زمان نوشتن وجود دارد:
از آنجا که 10. 12 در انتهای خط اول است ، نسخه NPM بسته @Types/Node نیز 10. 12. x خواهد بود. توجه داشته باشید که نظر خط اول در پرونده index. d. ts فقط باید شامل نسخه اصلی. minor (به عنوان مثال 10. 12) باشد و نباید حاوی نسخه پچ باشد (به عنوان مثال 10. 12. 4). این امر به این دلیل است که فقط شماره های اصلی و جزئی انتشار بین بسته های کتابخانه و بسته های اعلامیه ای تراز شده است. شماره انتشار پچ بسته اعلامیه نوع (به عنوان مثال . 0 در 10. 12. 0) با قطعاً تایپ شده به صفر می رسد و هر بار که یک بسته جدید/گره جدید @جدید منتشر می شود برای همان نسخه اصلی/جزئی از نسخه های اصلی/جزئی منتشر می شودکتابخانه مربوطه
بعضی اوقات نسخه های بسته بندی اعلامیه و نسخه های بسته کتابخانه می توانند از همگام سازی خارج شوند. در زیر چند دلیل متداول به این ترتیب ، به منظور ناراحتی کاربران یک کتابخانه ، وجود دارد. فقط آخرین مورد به طور معمول مشکل ساز است.
- همانطور که در بالا ذکر شد ، نسخه پچ بسته اعلامیه نوع با نسخه پچ کتابخانه ارتباطی ندارد. این اجازه می دهد تا به طور قطع تایپ شود تا اعلامیه های نوع با خیال راحت برای همان نسخه اصلی/جزئی یک کتابخانه به روز شود.
- در صورت بروزرسانی بسته ای برای عملکرد جدید ، فراموش نکنید که شماره نسخه را به روز کنید تا با آن نسخه از کتابخانه صف کنید. اگر کاربران اطمینان حاصل کنند که نسخه ها بین بسته های JavaScript و بسته های مربوط به آنها مطابقت دارند ، به روزرسانی NPM معمولاً فقط کار می کند.
- معمول است که به روزرسانی های بسته بندی اعلامیه از نوع به روزرسانی های کتابخانه عقب نشینی می کنند زیرا اغلب کاربران کتابخانه هستند ، نه نگهدارنده ، که هنگام انتشار ویژگی های جدید کتابخانه به روز می شوند. بنابراین ممکن است تاخیر روزها ، هفته ها یا حتی چند ماه قبل از اینکه یک عضو مفید جامعه PR را برای به روزرسانی بسته اعلامیه نوع برای انتشار جدید کتابخانه ارسال کند ، وجود داشته باشد. اگر از این امر تحت تأثیر قرار بگیرید ، می توانید تغییری باشید که می خواهید در جهان ببینید و می توانید آن عضو جامعه مفید باشید!
❗ اگر در حال به روزرسانی اعلامیه های نوع برای یک کتابخانه هستید ، همیشه نسخه major. minor را در خط اول index. d. ts تنظیم کنید تا با نسخه کتابخانه ای که شما مستند می کنید مطابقت داشته باشد!❗
اگر یک کتابخانه به نسخه اصلی جدید با تغییر تغییرات به روز شود ، چگونه باید بسته اعلامیه نوع آن را به روز کنم؟
نسخه معنایی مستلزم آن است که نسخه هایی با تغییرات شکستن باید شماره نسخه اصلی را افزایش دهند. به عنوان مثال ، کتابخانه ای که پس از انتشار 3. 5. 8 ، یک عملکرد صادر شده عمومی را حذف می کند ، باید نسخه خود را در نسخه بعدی خود به 4. 0. 0 برساند. علاوه بر این ، هنگامی که نسخه 4. 0. 0 کتابخانه تمام شد ، بسته اعلامیه نوع قطعاً تایپ شده آن نیز باید به 4. 0. 0 به روز شود ، از جمله هرگونه تغییر در API کتابخانه.
بسیاری از کتابخانه ها دارای یک پایگاه نصب شده بزرگ از توسعه دهندگان (از جمله نگهدارنده های سایر بسته ها با استفاده از آن کتابخانه به عنوان وابستگی) هستند که بلافاصله به نسخه جدیدی که دارای تغییرات شکسته است ، حرکت نمی کنند ، زیرا ممکن است ماه ها تا زمان نگهدارنده زمان بازنویسی داشته باشدکد برای سازگاری با نسخه جدید. در این میان ، کاربران نسخه های کتابخانه قدیمی هنوز ممکن است بخواهند اعلامیه های نوع را برای نسخه های قدیمی به روز کنند.
اگر قصد دارید به روزرسانی نسخه قدیمی اعلامیه های نوع کتابخانه را ادامه دهید ، می توانید یک زیر پوشه جدید (به عنوان مثال / v2 /) را برای نسخه فعلی (به زودی "قدیمی") ایجاد کنید و پرونده های موجود را از نسخه فعلی کپی کنید تاآی تی.
از آنجا که پوشه ریشه همیشه باید حاوی اعلامیه های جدید برای آخرین نسخه ("جدید") باشد ، شما باید چند تغییر در پرونده های موجود در زیرمجموعه قدیمی خود ایجاد کنید تا اطمینان حاصل شود که منابع مربوط به مسیر نسبی به زیر مجموعه اشاره می کنند ، نهریشه
- مسیرهای نسبی را در tsconfig. json و همچنین tslint. json به روز کنید.
- قوانین نقشه برداری مسیر را اضافه کنید تا اطمینان حاصل شود که تست ها در مقابل نسخه مورد نظر اجرا می شوند.
به عنوان مثال ، کتابخانه تاریخ تغییرات بین نسخه 2. x و 3. x را ایجاد کرد. از آنجا که بسیاری از کاربران هنوز نسخه قدیمی 2. x را مصرف می کنند ، نگهدار که می خواست اعلامیه های نوع این کتابخانه را به 3. x به روز کند ، یک پوشه V2 را در مخزن تاریخ اضافه کرد که حاوی اعلامیه های نوع برای نسخه قدیمی است. در زمان نوشتن ، تاریخچه v2 tsconfig. json تقریباً شبیه است:
اگر بسته های دیگری در مورد تایپ شده وجود دارد که با نسخه جدید ناسازگار هستند ، باید نقشه های مسیر را به نسخه قدیمی اضافه کنید. بسته به نسخه قدیمی نیز باید این کار را برای بسته ها انجام دهید.
به عنوان مثال ، React-Router به تاریخ@2 بستگی دارد ، بنابراین React-Router tsconfig. json دارای نقشه ای برای "تاریخ" است: ["تاریخ/v2"]. از لحاظ روحی ، Bootstrap React-Router (که بستگی به واکنش-روتر دارد) همچنین برای اضافه کردن همان نقشه برداری مسیر ("تاریخ": ["تاریخ/v2"]) در tsconfig. json خود لازم است تا زمانی که وابستگی واکنش-روتر آن به روز شودآخرین ویرایش.
همچنین ، /// با نقشه برداری مسیر کار نخواهد کرد ، بنابراین وابستگی ها باید از واردات استفاده کنند.
چگونه می توانم تعاریفی را برای بسته هایی بنویسم که می توانند در سطح جهان و به عنوان یک ماژول استفاده شوند؟
کتابچه راهنمای TypeScript حاوی اطلاعات کلی عالی در مورد تعاریف نوشتن است ، و همچنین این پرونده تعریف مثال که نشان می دهد نحوه ایجاد تعریف با استفاده از نحو ماژول به سبک ES6 را نشان می دهد ، در حالی که اشیاء را نیز در دسترس قرار می دهد. این تکنیک عملاً در تعریف برای big. js نشان داده شده است ، که کتابخانه ای است که می تواند از طریق برچسب اسکریپت در یک صفحه وب بارگیری شود ، یا از طریق واردات نیاز یا واردات به سبک ES6 وارد شود.
برای آزمایش چگونگی استفاده از تعریف شما در هنگام مراجعه به سطح جهانی و یا به عنوان یک ماژول وارداتی ، یک پوشه آزمایش ایجاد کرده و دو پرونده تست را در آنجا قرار دهید. یکی از yourlibraryname-global. test. ts و سایر موارد yourlibraryname-module. test. ts را نام ببرید. پرونده تست جهانی باید تعریف را مطابق نحوه استفاده از آن در یک اسکریپت بارگذاری شده در یک صفحه وب که در آن کتابخانه در دامنه جهانی موجود است استفاده کند - در این سناریو نباید بیانیه واردات را مشخص کنید. پرونده تست ماژول باید تعریف را مطابق با نحوه استفاده از آن هنگام واردات (از جمله بیانیه (های) واردات) اعمال کند. اگر یک ویژگی پرونده را در پرونده tsconfig. json خود مشخص کنید ، حتماً هر دو پرونده تست را درج کنید. یک نمونه عملی از این مورد در تعریف Big. js نیز موجود است.
لطفاً توجه داشته باشید که لازم نیست تعریف کامل در هر پرونده آزمایشی را انجام دهید - کافی است که فقط عناصر قابل دسترسی در سطح جهانی را در پرونده تست جهانی آزمایش کنید و تعریف را در پرونده تست ماژول یا برعکس انجام دهید.
در مورد بسته های scoped چیست؟
انواع بسته های scoped @foo/bar باید در انواع/foo__bar قرار بگیرند. توجه داشته باشید که زیر نظر مضاعف است.
هنگامی که از DTS ژن برای داربست یک بسته بندی شده استفاده می شود ، باید خاصیت مسیرها به صورت دستی در tsconfig. json تولید شده سازگار شود تا به درستی از بسته بندی شده استفاده شود:
این پروژه تحت مجوز MIT مجوز دارد.
حق چاپ در پرونده های تعریف مربوط به هر مشارکت کننده ذکر شده در ابتدای هر پرونده تعریف است.
فارکس اسلامی...
ما را در سایت فارکس اسلامی دنبال می کنید
برچسب : نویسنده : هدایت هاشمی بازدید : 46 تاريخ : پنجشنبه 3 فروردين 1402 ساعت: 11:18