باز کردن قفل قدرت Typecript: انواع پیشرفته ، نکات عملکرد و بهترین شیوه ها

TypeScript به انتخاب برنامه های جاوا اسکریپت در مقیاس بزرگ تبدیل شده است ، نوع ایمنی ، مقیاس پذیری و تجربه توسعه دهنده را بهبود می بخشد. در حالی که انواع و رابط های اساسی به طور گسترده ای مورد استفاده قرار می گیرند ، باز کردن پتانسیل کامل TypeScript نیاز به درک عمیق از انواع پیشرفته ، بهینه سازی عملکرد و بهترین شیوه ها دارد. در این مقاله به بررسی این مفاهیم با مثال های عملی می پردازیم.
1. انواع پیشرفته Typescript
انواع نقشه برداری شده
انواع نقشه برداری به شما امکان می دهد با تبدیل انواع موجودات موجود ، انواع جدیدی را ایجاد کنید. این برای اجرای محدودیت ها یا ایجاد انواع ابزار مفید است.
// Convert all properties of an object to be readonly
type ReadonlyObject<T> = { readonly [K in keyof T]: T[K] };
interface User {
name: string;
age: number;
}
const user: ReadonlyObject<User> = { name: "Alice", age: 30 };
// user.age = 31; // Error: Cannot assign to 'age' because it is a read-only property
انواع مشروط
انواع مشروط تحولات نوع قدرتمندی را بر اساس شرایط فراهم می کنند.
type IsString<T> = T extends string ? "Yes" : "No";
type Test1 = IsString<string>; // "Yes"
type Test2 = IsString<number>; // "No"
انواع الگوی تحت اللفظی
انواع الگوی الگوی ساخت انواع جدید مبتنی بر رشته را به صورت پویا فعال می کند.
type EventNames<T extends string> = `${T}Started` | `${T}Ended`;
type AppEvents = EventNames<"Download">; // "DownloadStarted" | "DownloadEnded"
انواع ابزار
TypeScript انواع ابزار داخلی مانند Partial
با Pick
با Omit
وت Record
برای ساده سازی تحولات نوع.
interface Person {
name: string;
age: number;
address: string;
}
// Make all properties optional
const partialPerson: Partial<Person> = { name: "John" };
// Pick only specific properties
const pickedPerson: Pick<Person, "name" | "age"> = { name: "John", age: 25 };
2. بهینه سازی عملکرد Typescript
از ژنرال های غیر ضروری خودداری کنید
در حالی که ژنرال ها قدرتمند هستند ، استفاده بیش از حد می تواند بر عملکرد و خوانایی تأثیر بگذارد. فقط در صورت لزوم از ژنرال استفاده کنید.
// Inefficient
type Wrapper<T> = { value: T };
const wrappedString: Wrapper<string> = { value: "Hello" };
// More efficient
interface Wrapper { value: string; }
const wrappedValue: Wrapper = { value: "Hello" };
استفاده کردن as const
برای اشیاء تغییر ناپذیر
با استفاده از as const
از گسترش نوع غیر ضروری ، بهبود عملکرد جلوگیری می کند.
const colors = ["red", "blue", "green"] as const;
type Color = (typeof colors)[number]; // "red" | "blue" | "green"
انواع باریک را ترجیح دهید any
از استفاده خودداری کنید any
همانطور که مزایای TypeScript را نفی می کند. به جای آن از انواع دقیق تر استفاده کنید.
function logMessage(msg: string | number) {
console.log(msg);
}
3 بهترین شیوه ها برای توسعه Typescript
1. حالت سخت را فعال کنید
حالت دقیق به گرفتن زودرس اشکالات احتمالی کمک می کند.
"compilerOptions": {
"strict": true
}
2. استنباط نوع اهرم
به جای اینکه به صراحت همه چیز را تایپ کنید ، اجازه دهید تا در صورت امکان انواع TypeScript را استنباط کند.
const count = 10; // TypeScript infers this as `number`
3. از ادعاهای نوع کم استفاده کنید
استفاده بیش از حد از as
می توانید از نوع چک کردن نوع TypeScript استفاده کنید و خطاهای زمان اجرا را معرفی کنید.
const value: unknown = "Hello";
const length = (value as string).length; // Avoid unless necessary
4. تعاریف نوع را خشک نگه دارید (خود را تکرار نکنید)
برای بهبود قابلیت حفظ انواع قابل استفاده مجدد را استخراج کنید.
type ApiResponse<T> = { data: T; success: boolean };
5. از ترکیب بیش از وراثت استفاده کنید
ترکیب انواع انعطاف پذیر و قابل استفاده مجدد را نگه می دارد.
interface Logger {
log: (message: string) => void;
}
interface Database extends Logger {
save: (data: object) => void;
}
پایان
با تسلط انواع پیشرفته ، بهینه سازی عملکرد و پیروی از بهترین شیوه ها، توسعه دهندگان می توانند قدرت کامل Typecript را باز کنند. این که آیا شما روی یک پروژه کوچک کار می کنید یا یک برنامه در مقیاس بزرگ ، سیستم قوی TypeScript می تواند به شما در نوشتن کد پاک کننده ، ایمن تر و قابل حفظ تر کمک کند.
🚀 ویژگی TypeScript مورد علاقه شما چیست؟ بیایید در نظرات بحث کنیم!