اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
چهار دقیقه
اگر چه من این نکات را در حین کار کردن بر روی پروژههای انگیولار یافتم، اما همه آنها مشخصههای انگیولار نیستند؛ فقط کدهای تایپ اسکریپت میباشند.
و استفاده از آن :
اگر به خط شماره 2 دقت کنید ، در صورتی که interface های بیشتری استفاده شود، این خط بزرگتر میشود و کمی بههم ریختگی ایجاد میکند.
و استفاده از آن :
هم چنین با استفاده از namespaceها میتوان خیلی بهتر interfaceها را سازماندهی و گروه بندی کرد.
راه حل شماره 2 : استفاده از فایلهای d
چگونه میتوان از آن استفاده کرد؟ به کدهای زیر توجه کنید:
Eliminating the need to import interfaces
من interface ها را دوست دارم با این حال نمیخواهم هر بار آنها را import کنم. تمایلی ندارم فایلهای من بخاطر import های چند خطی کثیف شوند (فقط به منظور strong typing )، اگر چه Visual Studio Code ویژگی auto-import را دارا میباشد. در حالت معمول به صورت زیر کار میکنیم :
// api.model.ts export interface Customer { id: number; name: string; } export interface User { id: number; isActive: boolean; }
// using the interfaces import { Customer, User } from './api.model'; export class MyComponent { cust: Customer; }
راه حل شماره 1 : استفاده از namespace
با استفاده از namespaceها میتوان نیاز به import فایلهای interface را حذف کرد:
// api.model.ts namespace ApiModel { export interface Customer { id: number; name: string; } export interface User { id: number; isActive: boolean; } }
// using the interfaces export class MyComponent { cust: ApiModel.Customer; }
اجازه بدهید بگویم اگر شما فایل دیگری به نام مثلا api.v2.model.ts را داشته باشید و بخواهید interface های جدیدی را به این فایل اضافه کنید، میتوانید از همان نام namespace مشخص شده قبلی استفاده کنید:
// api.v2.model.ts namespace ApiModel { export interface Order { id: number; total: number; } }
برای استفاده از interface جدیدا ایجاد شده، میتوانید همانند مثال قبل کار کنید: ( استفاده از interface ها با namespace های یکسان و فایلهای متفاوت)
export class MyComponent { cust: ApiModel.Customer; order: ApiModel.Order; }
راه دیگر حذف کردن import ها، ایجاد یک فایل typescript با پسوند d.ts. میباشد ( d مخفف declaration file در typescript میباشد). در ضمن نیازی به export کردن interface ها در فایلهای d نمیباشد:
// api.model.d.ts interface Customer { id: number; name: string; }
در زیر از Customer بدون نیاز به import کردن استفاده شده است :
// using the interfaces of d file export class MyComponent { cust: Customer; }
من راه حل شماره 1 را در مقابل راه حل شماره 2 پیشنهاد میکنم زیرا :
از فایل d معمولا برای کتابخانههای ثالث استفاده میشود.
namespace ها این اجازه را به ما میدهند تا فایلها را خیلی بهتر سازماندهی کنیم.
Making all interface properties optional
این موضوع خیلی رایج است که شما از یک interface برای عملیات CRUD استفاده کنید. مثلا شما یک interface را به نام customer دارید که تمامی فیلدهای آن در زمان ایجاد اجباری میباشند؛ اما در زمان بهروز رسانی، همه آنها اختیاری هستند. آیا شما نیاز به دو interface برای مدیریت کردن این سناریو دارید؟
راه حل : استفاده از Partial
Partial یک type است که خصوصیات یک شیء را اختیاری میکند. تعریف آن در فایل d پیش فرضی به نام lib.es5.d.ts قرار داده شدهاست:
// lib.es5.d.ts type Partial<T> = { [P in keyof T]?: T[P]; };
import { Customer } from './api.model'; export class MyComponent { cust: Partial<Customer>; / ngOninit() { this.cust = { name: 'jane' }; } }
در کد بالا هیچ خطایی پرتاب نمیشود؛ به دلیل اینکه همهی فیلدها اختیاری شدهاند (اگر Partial را حذف کنیم با خطا مواجه میشویم).
اگر شما تعریف Partial را پیدا نکردید، میتوانید یک فایل d را ایجاد کنید؛ مثلا با نام util.d.ts، سپس قطعه کد تعریف Partial را در آن قرار دهید.
Stop throwing me error, I know what I'm doing
در بعضی از سناریوها شما میخواهید به Typescript بگویید که "من میدانم دارم چکار میکنم لطفا اینجا بی خیال من شو".
راه حل : استفاده از ts-ignore comment@
از نگارش 2.6 به بعد Typescript، شما میتوانید این کار را به منظور مانع شدن از ایجاد خطا با استفاده از کامنت ts-ignore@ انجام دهید.
برای مثال در کد زیر، Typescript خطای Unreachable code detected را پرتاب خواهد کرد:
if (false) { console.log('x'); }
شما میتوانید با استفاده از کامنت ts-ignore@ مانع از پرتاب خطا شوید :
if (false) { // @ts-ignore console.log('x'); }
البته من به شما پیشنهاد میکنم که همیشه خطاهاتون را برطرف کنید؛ قبل از اینکه آنها را ignore کنید.