7 ترفند مخفی TypeScript که حرفه ای ها از آنها استفاده می کنند 😎🤫

TypeScript ابزاری برجسته برای آسان کردن زندگی ما و اجتناب از آن است اشکالات، اما گاهی اوقات استفاده از آن بسیار طاقت فرسا است.
این مقاله 7 را تشریح می کند TypeScript ترفندهایی که زندگی شما را آسان تر می کند و همه حرفه ای ها از آن استفاده می کنند.
1. استنتاج را تایپ کنید
تایپ اسکریپت به اندازه کافی باهوش است که انواع داده ها را استنتاج کنید هنگامی که به آن کمک می کنید تا آنها را محدود کند.
enum CounterActionType {
Increment = "INCREMENT",
IncrementBy = "INCREMENT_BY",
}
interface IncrementAction {
type: CounterActionType.Increment;
}
interface IncrementByAction {
type: CounterActionType.IncrementBy;
payload: number;
}
type CounterAction =
| IncrementAction
| IncrementByAction;
function reducer(state: number, action: CounterAction) {
switch (action.type) {
case CounterActionType.Increment:
// TS infers that the action is IncrementAction
// & has no payload
return state + 1;
case CounterActionType.IncrementBy:
// TS infers that the action is IncrementByAction
// & has a number as a payload
return state + action.payload;
default:
return state;
}
}
همانطور که در بالا نشان داده شده، TypeScript نوع عمل را بر اساس استنباط می کند type
دارایی، بنابراین لازم نیست بررسی کنید که آیا payload
وجود دارد.
2. انواع تحت اللفظی
اغلب شما به مقادیر خاصی برای یک متغیر نیاز دارید، اینجاست انواع تحت اللفظی به کار بیاید
type Status = "idle" | "loading" | "success" | "error";
برای اعداد نیز کار می کند:
type Review = 1 | 2 | 3 | 4 | 5;
// or better yet:
const reviewMap = {
terrible: 1,
average: 2,
good: 3,
great: 4,
incredible: 5,
} as const;
// This will generate the same type as above,
// but it's much more maintainable
type Review = typeof reviewMap[keyof typeof reviewMap];
3. تایپ گارد
محافظ تایپ کنید روش دیگری برای محدود کردن نوع متغیر است:
function isNumber(value: any): value is number {
return typeof value === "number";
}
const validateAge = (age: any) => {
if (isNumber(age)) {
// validation logic
// ...
} else {
console.error("The age must be a number");
}
};
توجه: در مثال بالا، بهتر است از:
const validateAge = (age: number) => {
// ...
};
مثال سادهسازی بود برای نشان دادن چگونگی محافظ های نوع کار
4. امضای فهرست
وقتی دارید کلیدهای پویا در یک شی، می توانید از یک استفاده کنید امضای فهرست برای تعریف نوع آن:
enum PaticipationStatus {
Joined = "JOINED",
Left = "LEFT",
Pending = "PENDING",
}
interface ParticipantData {
[id: string]: PaticipationStatus;
}
const participants: ParticipantData = {
id1: PaticipationStatus.Joined,
id2: PaticipationStatus.Left,
id3: PaticipationStatus.Pending,
// ...
};
5. ژنریک
ژنریک ها ابزار قدرتمندی برای استفاده مجدد بیشتر از کد شما هستند. به شما اجازه می دهد نوعی را تعریف کنید که با استفاده از تابع شما تعیین می شود.
در مثال زیر، T
یک نوع ژنریک است:
const clone = <T>(object: T) => {
const clonedObject: T = JSON.parse(JSON.stringify(object));
return clonedObject;
};
const obj = {
a: 1,
b: {
c: 3,
},
};
const obj2 = clone(obj);
6. انواع غیرقابل تغییر
شما می توانید انواع خود را بسازید تغییرناپذیر با اضافه کردن as const
. این تضمین می کند که شما به طور تصادفی مقادیر را تغییر نمی دهید.
const ErrorMessages = {
InvalidEmail: "Invalid email",
InvalidPassword: "Invalid password",
// ...
} as const;
// This will throw an error
ErrorMessages.InvalidEmail = "New error message";
7. جزئی، انتخاب، حذف و انواع مورد نیاز
اغلب در حین کار با سرور & داده های محلی، باید برخی از خواص را بسازید اختیاری یا ضروری.
به جای تعریف صدها رابط با نسخه های کمی تغییر یافته از همان داده ها. شما می توانید این کار را با استفاده از Partial
، Pick
، Omit
& Required
انواع
interface User {
name: string;
age?: number;
email: string;
}
type PartialUser = Partial<User>;
type PickUser = Pick<User, "name" | "age">;
type OmitUser = Omit<User, "age">;
type RequiredUser = Required<User>;
// PartialUser is equivalent to:
// interface PartialUser {
// name?: string;
// age?: number;
// email?: string;
// }
// PickUser is equivalent to:
// interface PickUser {
// name: string;
// age?: number;
// }
// OmitUser is equivalent to:
// interface OmitUser {
// name: string;
// email: string;
// }
// RequiredUser is equivalent to:
// interface RequiredUser {
// name: string;
// age: number;
// email: string;
// }
و البته می توانید استفاده کنید تقاطع برای ترکیب آنها:
type A = B & C;
جایی که B
& C
هر نوع هستند
این همه مردمی! 🎉
- فری پیک
- گیفی
نیاز به یک فریلنسر توسعه فرانت اند با رتبه برتر برای از بین بردن مشکلات توسعه خود؟ با من در Upwork تماس بگیرید
می خواهید ببینید روی چه چیزی کار می کنم؟ وب سایت شخصی و GitHub من را بررسی کنید
می خواهید وصل شوید؟ در لینکدین با من تماس بگیرید
من را در اینستاگرام دنبال کنید تا ببینید اخیراً در حال انجام چه کاری هستم.
وبلاگ های من را دنبال کنید Tidbits جدید هر دو هفته در Dev
سوالات متداول
اینها چند سؤال متداول است که من میپرسم. بنابراین، من به این امیدوارم سوالات متداول بخش مشکلات شما را حل می کند
-
من یک مبتدی هستم، چگونه باید Front-End Web Dev را یاد بگیرم؟
به مقالات زیر نگاه کنید:- نقشه راه توسعه Front End
- ایده های پروژه Front End
-
آیا شما من را راهنمایی می کنید؟
با عرض پوزش، من در حال حاضر تحت فشار زیادی هستم و وقت ندارم کسی را راهنمایی کنم.