نسخه ۵٫۵ تایپ اسکریپت به تازگی منتشر شده است. در این مقاله قصد داریم تا تغییراتی که در این نسخه صورت گرفته است را باهم بررسی کنیم.
منظور از Inferred Type Predicates در نسخه ۵٫۵ تایپ اسکریپت چیست؟
نسخه ۵٫۵ تایپ اسکریپت یک ویژگی مهم به نام Inferred Type Predicates را معرفی میکند. این ویژگی با استنتاج خودکار تایپ بر اساس توابع فیلتر سفارشی، بررسی تایپ را برای توسعهدهندگان سادهتر میکند.
در نسخههای قبلی، تایپ اسکریپت به اندازه کافی هوشمند نبود که بتواند تایپهای دقیق را پس از عملیاتی مانند فیلتر کردن مقادیر
undefined
undefined
از یک
آرایه استنتاج کند. اما اکنون، تایپ اسکریپت میتواند یک type predicate را استنتاج نماید، که امکان بررسی دقیقتر تایپ را فراهم میکند.
بررسی یک مثال
در ادامه یک مثال کد داریم که نحوه عملکرد inferred type predicates در نسخه ۵٫۵ تایپ اسکریپت را نشان میدهد:
function isBirdReal(bird: Bird | undefined): bird is Bird {
return bird !== undefined;
const birds: (Bird | undefined)[] = getBirds();
const realBirds = birds.filter(isBirdReal);
realBirds.forEach(bird => {
bird.sing(); // No error - TypeScript knows bird is of type Bird
function isBirdReal(bird: Bird | undefined): bird is Bird {
return bird !== undefined;
}
const birds: (Bird | undefined)[] = getBirds();
const realBirds = birds.filter(isBirdReal);
realBirds.forEach(bird => {
bird.sing(); // No error - TypeScript knows bird is of type Bird
});
function isBirdReal(bird: Bird | undefined): bird is Bird {
return bird !== undefined;
}
const birds: (Bird | undefined)[] = getBirds();
const realBirds = birds.filter(isBirdReal);
realBirds.forEach(bird => {
bird.sing(); // No error - TypeScript knows bird is of type Bird
});
بررسی نکات کلیدی
- نسخه ۵٫۵ تایپ اسکریپت میتواند به طور خودکار تایپها را در طول عملیات آرایه استنتاج کند.
- ویژگی Inferred Type Predicates نیاز به type annotationها را کاهش میدهد.
- این ویژگی کد را قویتر کرده و خواندن آن را آسانتر مینمایند.
به طور کلی، Inferred Type Predicates تایپ اسکریپت را برای کنترل تایپ در سناریوهای پیچیده کارآمدتر میکند.
Control Flow Narrowing چگونه برای دسترسیهای ایندکس شده دائمی کار میکند؟
نسخه ۵٫۵ تایپ اسکریپت Control Flow Narrowing را برای دسترسیهایی که دائماً ایندکس میشوند، بهبود میبخشد. این بهبود به تایپ اسکریپت اجازه میدهد تا بررسیهای تایپ در ویژگیهای آبجکت را بهطور مؤثرتری به خاطر بسپارد.
در نسخههای قبلی، تایپ اسکریپت هنگام دسترسی به ویژگیهای آبجکت توسط keyهای داینامیک، مسیر اطلاعات تایپ را از دست میداد. اما اکنون، این اطلاعات را حفظ میکند. این کار به جلوگیری از ساخت متغیرهای اضافی کمک میکند و کد را تمیز نگه میدارد.
بررسی یک مثال
در ادامه یک مثال ساده داریم که این بهبود نشان میدهد:
const data: { [key: string]: unknown } = fetchData();
if (typeof data["name"] === "string") {
data["name"]; // TypeScript knows this is a string
const data: { [key: string]: unknown } = fetchData();
if (typeof data["name"] === "string") {
data["name"]; // TypeScript knows this is a string
}
const data: { [key: string]: unknown } = fetchData();
if (typeof data["name"] === "string") {
data["name"]; // TypeScript knows this is a string
}
بررسی نکات کلیدی
- کاهش متغیرهای اضافی: بدون این که نیاز به ایجاد متغیرهای واسطه اضافی باشد، تعداد آنها را کاهش میدهد.
- داشتن کد تمیزتر: تایپ اسکریپت اطلاعات تایپ را در بررسیهای ویژگی آبجکت حفظ میکند.
- داشتن کد کارآمدتر: تجزیه و تحلیل control flow را بهبود میبخشد و boilerplate را به حداقل میرساند.
Control Flow Narrowing برای دسترسیهایی که دائماً ایندکس میشوند، بررسیهای هوشمندانهتر و بصریتر را تضمین میکند و کد تایپ اسکریپتی ما را کارآمدتر کرده و نوشتن آن را آسانتر مینماید.
پشتیبانی جدید نسخه ۵٫۵ تایپ اسکریپت برای متدهای Set
Set
ECMAScript چیست؟
تایپ اسکریپت در نسخه ۵٫۵، پشتیبانی از متدهای جدید
Set
Set
ECMAScript را معرفی میکند. این متدها کار با مجموعهها را با افزودن عملکرد برای
union
union
،
intersection
intersection
،
difference
difference
و
symmetric difference
symmetric difference
بهبود میبخشند.
در ادامه چهار متد جدید را در یک مثال بررسی میکنیم:
const fruits = new Set(['apple', 'banana']);
const otherFruits = new Set(['banana', 'orange']);
const allFruits = fruits.union(otherFruits); // {'apple', 'banana', 'orange'}
const commonFruits = fruits.intersection(otherFruits); // {'banana'}
const uniqueFruits = fruits.difference(otherFruits); // {'apple'}
const diffFruits = fruits.symmetricDifference(otherFruits); // {'apple', 'orange'}
const fruits = new Set(['apple', 'banana']);
const otherFruits = new Set(['banana', 'orange']);
// Union
const allFruits = fruits.union(otherFruits); // {'apple', 'banana', 'orange'}
// Intersection
const commonFruits = fruits.intersection(otherFruits); // {'banana'}
// Difference
const uniqueFruits = fruits.difference(otherFruits); // {'apple'}
// Symmetric Difference
const diffFruits = fruits.symmetricDifference(otherFruits); // {'apple', 'orange'}
const fruits = new Set(['apple', 'banana']);
const otherFruits = new Set(['banana', 'orange']);
// Union
const allFruits = fruits.union(otherFruits); // {'apple', 'banana', 'orange'}
// Intersection
const commonFruits = fruits.intersection(otherFruits); // {'banana'}
// Difference
const uniqueFruits = fruits.difference(otherFruits); // {'apple'}
// Symmetric Difference
const diffFruits = fruits.symmetricDifference(otherFruits); // {'apple', 'orange'}
بررسی نکات کلیدی
union
union
: المنتهای هر دو مجموعه را باهم ترکیب میکند.
intersection
intersection
: المنتهای مشترک را در هر دو مجموعه پیدا میکند.
difference
difference
: المنتهایی را که در مجموعه اول وجود دارند اما در مجموعه دوم نیستند، پیدا میکند.
symmetric difference
symmetric difference
: المنتهایی را پیدا میکند که در یک مجموعه هستند اما در هر دو مجموعه نیستند.
این متدها عملیات روی مجموعهها را سادهتر میکنند و عمل کدنویسی را بصریتر و کارآمدتر میکنند.
چگونه Type Imports در JSDoc توسعه جاوااسکریپت را بهبود میبخشد؟
نسخه ۵٫۵ تایپ اسکریپت یک ویژگی جدید قدرتمند را معرفی میکند که آن Type Imports در JSDoc میباشد. این ویژگی به توسعهدهندگان جاوااسکریپت کمک زیادی کرده و به آنها اجازه میدهد تا تایپهای تایپ اسکریپت را در JSDoc commentهای خود وارد کنند.
مزایای Type Imports در JSDoc
- بررسی تایپ بهبود یافته: توسعهدهندگان جاوااسکریپت اکنون میتوانند از بررسی تایپ تایپ اسکریپت برای اطمینان از کیفیت بهتر کد استفاده کنند.
- پشتیبانی ویرایشگر پیشرفته: IDEها میتوانند تکمیل خودکار و بررسی خطا را به شکل بهتری ارائه دهند.
- ادغام آسانتر: Type Imports تایپها را بهطور یکپارچه از کتابخانههای تایپ اسکریپت بدون تغییر سینتکس جاوااسکریپت ادغام میکند.
بررسی یک مثال
در مثال زیر نحوه import کردن تایپها با استفاده از JSDoc را مشاهده میکنیم:
* @typedef {import('some-module').SomeType} SomeType
* @param {SomeType} param - The parameter of SomeType
function exampleFunction(param) {
/**
* @typedef {import('some-module').SomeType} SomeType
*/
/**
* @param {SomeType} param - The parameter of SomeType
*/
function exampleFunction(param) {
// function body
}
/**
* @typedef {import('some-module').SomeType} SomeType
*/
/**
* @param {SomeType} param - The parameter of SomeType
*/
function exampleFunction(param) {
// function body
}
بررسی نکات کلیدی
- یکپارچه سازی تایپ: میتوانیم تایپها را مستقیماً به JSDoc comments وارد کنیم.
- مستندات پیشرفته: تایپها مستندات واضحتری را برای توابع و متغیرها ارائه میدهند.
- dependencyهای کاهش یافته: هنگامی که فقط به اطلاعات تایپ نیاز داریم، بهتر است از وارد کردن اطلاعات کل ماژولها خودداری نماییم.
به طور کلی، type imports در JSDoc با استفاده از سیستم تایپ قدرتمند تایپ اسکریپت، توسعه جاوااسکریپت را قویتر و کارآمدتر میکند.
منظور از Isolated Declarationها چیست و مزایای آنها چه میباشد؟
Isolated Declarationها در نسخه ۵٫۵ تایپ اسکریپت نحوه تولید فایلهای تعریفی را بهبود میبخشد و توسعه را کارآمدتر میکند.
مزایای Isolated Declarationها
- تولید سریعتر تعریف: ابزارها میتوانند فایلهای تعریفی را بدون نیاز به جستجوگر تایپ کامل ایجاد کنند.
- بهبود زمان
build
build
: میتوانیم پروژهها را به صورت موازی بسازیم و روند توسعه را سرعت ببخشیم.
- تایپهای بازگشتی صریح: در صورتی که توابع export شده فاقد تایپهای بازگشتی صریح باشند، در این صورت خطا گزارش میشوند که این موضوع سبب بهبود قابلیت اطمینان کد ما میگردد.
بررسی یک مثال
در ادامه یک مثال ساده داریم:
export function add(a: number, b: number): number {
export function add(a: number, b: number): number {
return a + b;
}
export function add(a: number, b: number): number {
return a + b;
}
با isolated declarationها، تایپ اسکریپت اطمینان حاصل میکند که تایپ بازگشتی صریح است تا کد ما قابلیت اطمینان بالاتری داشته باشد.
بررسی نکات کلیدی
- بررسی Export ساده: فقط تایپهای API عمومی به تایپهای صریح نیاز دارند.
- سربار کمتر: کد داخلی نیازی به type annotationهای اضافی ندارد.
- بهبود پردازش موازی: isolated declaration عملکرد
build
build
را در پروژههای بزرگ افزایش میدهد.
isolated declarationها، توسعه تایپ اسکریپت را به شکل قابل توجهی تقویت میکنند و همین موضوع کمک میکند تا قابلیت نگهداری کد بالاتر برود و فرآیند
build
build
سریعتر شود.
نسخه ۵٫۵ تایپ اسکریپت چگونه قابلیت اطمینان ویرایشگر و Watch Mode را بهبود میبخشد؟
نسخه ۵٫۵ تایپ اسکریپت پیشرفتهای قابل توجهی را در رابطه با قابلیت اطمینان ویرایشگر و watch mode به ارمغان میآورد و بهرهوری توسعهدهندگان را افزایش میدهد.
بررسی پیشرفتهای کلیدی
- Crash شدن کمتر: سرور تایپ اسکریپت اکنون کمتر دچار Crash میشود و محیط توسعه پایدارتری را فراهم میکند.
- مدیریت خطای بهتر: وقتی خطاها در فایلهای json برطرف میشوند، تایپ اسکریپت در نسخه جدید خطاهای قدیمی را پاک کرده و در نتیجه مشکلات مربوط به آنها را کاهش میدهد.
- بهبود File Watching: تایپ اسکریپت در مدیریت حذف فایلها، جابجاییها و دایرکتوریهای symlink شده بهبودهایی را داشته است و همچنین وقفهها را به حداقل میرساند.
تاثیری که این بهبودها بر روی بهرهوری توسعهدهندگان میگذارد عبارتند از:
- کاهش زمان خرابی: هر چه میزان crash شدنها کمتر باشد به این معنی است که زمان کمتری را برای راه اندازی مجدد سرور تایپ اسکریپت نیاز داریم.
- جریان توسعه روانتر: مدیریت خطا و file watching بهبود یافته امکان تجربه کدنویسی یکپارچهتر را فراهم میسازد.
- بهبود قابلیت اطمینان: توسعهدهندگان میتوانند اعتماد بیشتری به ابزارهای خود داشته باشند و به جای عیبیابی، روی کدنویسی تمرکز کنند.
با این بهروزرسانیها، نسخه ۵٫۵ تایپ اسکریپت به طور قابل توجهی روند توسعه را سادهتر کرده و آن را کارآمدتر و قابل اعتمادتر میکند.
چه بهینهسازیهای مربوط به عملکرد در نسخه ۵٫۵ تایپ اسکریپت انجام شده است؟
نسخه ۵٫۵ تایپ اسکریپت چندین بهینهسازی عملکرد را معرفی میکند که به طور قابل توجهی سرعت توسعه را افزایش میدهد.
بررسی بهینهسازیهای کلیدی
- زمان
build
build
سریعتر:
- کامپایلر تایپ اسکریپت با بهبود نحوه مدیریت آبجکتهای monomorphic، به سرعت ۵٫۸ درصدی در زمان
build
build
دست پیدا کرده است.
- عملیات Language service اکنون ۱۰ تا ۲۰ درصد سریعتر است و روند توسعه را روانتر میکند.
- کاهش مصرف حافظه:
- Isolated declarationها خطاهایی را برای ماژولهایی گزارش میکنند که فاقد type annotationهای کافی هستند. بنابراین، زمان
build
build
را کوتاهتر میکنند و سربار حافظه را در پروژههای بزرگ کاهش میدهند.
- نمودار Control Flow بهینه شده:
- با کاهش پیمایش گرههای غیرضروری در تجزیه و تحلیل Control Flow افزایش عملکرد صورت میگیرد.
- APIهای Transpile بهبود یافته:
- APIهای
TranspileModule
TranspileModule
و TranspileDeclaration
TranspileDeclaration
اکنون از بررسی کامل تایپ اجتناب میکنند و در نتیجه سرعت ساخت ابزارهایی که از این APIها استفاده میکنند دو برابر میشود.
تاثیر بهینهسازیها بر روی سرعت توسعه
- زمان خرابی کمتر:
- توسعهدهندگان زمانهای
build
build
سریعتر و خرابیهای کمتری را تجربه میکنند و جریان کار مداوم را تضمین مینمایند.
- عملیات روانتر:
- transpile سریع کد و بررسی سریعتر تایپتر، coding sessionهای کارآمدتری را ممکن میسازد.
با این بهینهسازیها، نسخه ۵٫۵ تایپ اسکریپت معیار جدیدی را در عملکرد توسعه ایجاد میکند و آن را به یک ارتقاء ضروری برای کاربران تایپ اسکریپت تبدیل مینماید.
دیدگاهها: