از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
TypeScript: یک ویژگی را از یک شی حذف کنید
سرفصلهای مطلب
معرفی
درست مانند هر زبانی که آنها را دارد، اشیاء بخش مهمی از JS/TS هستند و به ما اجازه میدهند مجموعههایی از مقادیر را با انواع مختلف ذخیره کنیم. در حین کار با اشیا، ما اغلب نیاز به تغییر ویژگی های آنها داریم – در این مورد، حذف آنها.
این بایت روش های مختلف حذف یک ویژگی از یک شی در TypeScript را به شما نشان می دهد که با حذف یک ویژگی شروع می شود.
حذف یک ویژگی در TypeScript
حذف یک ویژگی از یک شی در TypeScript نسبتاً ساده است. ما استفاده می کنیم delete
کلمه کلیدی به دنبال شی و نام ویژگی. بیایید به یک مثال نگاه کنیم:
let user = {
name: 'John Doe',
age: 25,
occupation: 'Software Developer'
};
delete user.occupation;
console.log(user);
خروجی خواهد بود:
{
name: 'John Doe',
age: 25
}
همانطور که می بینید، occupation
دارایی با موفقیت حذف شد! آن آسان بود 🙂
حذف ویژگی های غیر اختیاری
توجه داشته باشید: در صورتی که آشنایی ندارید، در TypeScript، یک ویژگی غیر اختیاری، خاصیتی است که باید در یک شی وجود داشته باشد. بدون علامت سوال تعریف شده است (?
) بعد از نام ملک.
هنگام کار با اشیاء TypeScript، ممکن است با وضعیتی مواجه شوید که در آن باید یک ویژگی غیراختیاری را حذف کنید. با این حال، اگر بخواهید یک ویژگی غیراختیاری را مستقیماً حذف کنید، TypeScript با خطا مواجه می شود.
type User = {
name: string;
age: number;
occupation: string;
};
let user: User = {
name: 'John Doe',
age: 25,
occupation: 'Software Developer'
};
delete user.occupation; // Error: The operand of a 'delete' operator must be optional.
برای رسیدگی به این مورد، میتوانید از یک type assertion استفاده کنید تا به TypeScript بگویید که پس از حذف ویژگی، شی همچنان با نوع خود مطابقت دارد.
delete (user as {occupation?: string}).occupation;
اکنون، TypeScript خطایی ایجاد نخواهد کرد و occupation
طبق انتظار، دارایی حذف خواهد شد.
ترفند اینجا این قسمت است: (user as {occupation?: string})
. این یک ادعای نوع است که به کامپایلر میگوید درمان کند user
به عنوان یک شی با یک اختیاری occupation
خاصیت نوع string
. رفتار زمان اجرا را تغییر نمیدهد، اما راهنمایی در مورد شکل مورد انتظار شی به کامپایلر ارائه میکند.
استفاده از انواع به جای رابط
در TypeScript، هر دو type
و interface
می توان از آن برای تعریف شکل یک شی استفاده کرد. با این حال، وقتی صحبت از دستکاری ویژگی های شی می شود، type
مزایایی دارد
یکی از مزیتها توانایی ایجاد یک نوع جدید با حذف ویژگیهای خاص از نوع موجود با استفاده از آن است Omit
نوع سودمند این کار با رابط ها امکان پذیر نیست.
type User = {
name: string;
age: number;
occupation: string;
};
type UserWithoutOccupation = Omit<User, 'occupation'>;
let user: UserWithoutOccupation = {
name: 'John Doe',
age: 25
};
console.log(user);
در این مثال، UserWithoutOccupation
یک نوع جدید است که تمام خصوصیات آن را دارد User
بجز occupation
. این به ما امکان می دهد یک شی بسازیم user
که ندارد occupation
ویژگی، و TypeScript از آن شکایت نخواهد کرد!
تخریب برای حذف اموال
تخریب ساختار در TypeScript یک ویژگی خوب است که به ما امکان میدهد مقادیر آرایهها یا خصوصیات اشیاء را در متغیرهای متمایزشان باز کنیم. این می تواند زمانی بسیار مفید باشد که بخواهیم یک ویژگی را از یک شی، در میان سایر دستکاری های شی، حذف کنیم.
بیایید به یک مثال نگاه کنیم:
let obj = { a: 1, b: 2, c: 3 };
let { a, ...newObj } = obj;
console.log(newObj); // Output: { b: 2, c: 3 }
در کد بالا، یک شی جدید به نام ایجاد می کنیم newObj
که شامل تمام خواص از obj
بجز a
. این با تخریب به دست می آید obj
و مستثنی کردن a
از جسم تازه تشکیل شده
به استثنای کلیدهای پویا
ممکن است شرایطی وجود داشته باشد که لازم باشد کلیدهای پویا را از یک شی حذف کنید. TypeScript مستقیماً از این پشتیبانی نمی کند، اما می توانیم با کمک یک تابع کمکی از یک راه حل استفاده کنیم. در اینجا روش انجام این کار آمده است:
function excludeKey<T extends object, U extends keyof any>(obj: T, key: U) {
const { (key): _, ...newObj } = obj;
return newObj;
}
let obj = { a: 1, b: 2, c: 3 };
let newObj = excludeKey(obj, 'b');
console.log(newObj); // Output: { a: 1, c: 3 }
در کد بالا، excludeKey
تابع یک شی و یک کلید می گیرد و یک شی جدید به استثنای کلید مشخص شده را برمی گرداند. این یک راه مفید برای حذف کلیدهای پویا از یک شی است.
استفاده از نوع جزئی برای حذف ملک
TypeScript یک نوع ابزار را ارائه می دهد Partial<T>
، که باعث می شود تمام خواص در T
اختیاری. این می تواند برای حذف اموال در برخی موارد مفید باشد. در اینجا یک مثال است:
type MyObject = {
a: number;
b: number;
c: number;
};
function removeProperty<T, K extends keyof T>(obj: T, key: K): Partial<T> {
const { (key): _, ...newObj } = obj;
return newObj;
}
let obj: MyObject = { a: 1, b: 2, c: 3 };
let newObj = removeProperty(obj, 'a');
console.log(newObj); // Output: { b: 2, c: 3 }
در این کد، removeProperty
عملکرد استفاده می کند Partial<T>
برای نشان دادن اینکه شیء برگشتی ممکن است شامل تمام خصوصیات از نباشد T
.
استفاده از Omit و Pick برای Property Removal
این Omit<T, K>
نوع ابزار در TypeScript با انتخاب همه خصوصیات از یک نوع می سازد T
و سپس حذف K
. از سوی دیگر، Pick<T, K>
دقیقا برعکس عمل می کند، با چیدن نوع جدیدی ایجاد می کند K
خواص از T
.
بیایید ببینیم چگونه می توانیم از این انواع ابزار برای حذف اموال استفاده کنیم:
type MyObject = {
a: number;
b: number;
c: number;
};
type NewObject = Omit<MyObject, 'a'>;
let obj: NewObject = { b: 2, c: 3 };
console.log(obj); // Output: { b: 2, c: 3 }
type PickObject = Pick<MyObject, 'b' | 'c'>;
let pickObj: PickObject = { b: 2, c: 3 };
console.log(pickObj); // Output: { b: 2, c: 3 }
در کد بالا، NewObject
نوع با حذف ایجاد می شود a
از جانب MyObject
، و PickObject
با چیدن ایجاد می شود b
و c
از جانب MyObject
. این انواع ابزار راه خوبی برای دستکاری ویژگی های شی در TypeScript ارائه می دهند.
Lodash برای حذف اموال در TypeScript
البته، کتابخانه محبوب جاوا اسکریپت، Lodash، روشهای مفیدی را برای دستکاری آرایهها، اشیا و دیگر انواع دادهها ارائه میکند. یکی از این روش ها است omit
روشی که میتوانیم برای حذف ویژگیها از یک شی در TypeScript استفاده کنیم.
ابتدا باید Lodash را در پروژه خود نصب کنید. شما می توانید این کار را با اجرای دستور زیر در خود انجام دهید terminal:
$ npm install lodash
پس از نصب، می توانید import را omit
روش از Lodash:
import { omit } from 'lodash';
در اینجا یک مثال است که در آن ما یک user
شی، و ما می خواهیم آن را حذف کنیم password
دارایی از آن:
import { omit } from 'lodash';
let user = {
name: 'John Doe',
email: '(email protected)',
password: 'password123'
};
let userWithoutPassword = omit(user, 'password');
console.log(userWithoutPassword);
خروجی کد به صورت زیر خواهد بود:
{ name: 'John Doe', email: '(email protected)' }
توجه داشته باشید: این omit
متد شی اصلی را تغییر نمی دهد. در عوض، یک شی جدید با حذف ویژگی های مشخص شده برمی گرداند.
همانطور که می بینید، password
دارایی از user
هدف – شی.
در حالی که روشهای زیادی برای حذف ویژگیها از اشیا وجود دارد، نکته خوب در مورد استفاده از Lodash این است که در بسیاری از پروژهها از آن استفاده میشود و روشی بسیار تمیزتر برای انجام کار نسبت به برخی از مواردی است که قبلاً در این بایت نشان داده شد.
نتیجه
در این بایت روشهای مختلفی برای حذف ویژگیها، مانند استفاده از ویژگیهای داخلی TypeScript مانند Partial
نوع، Omit
و Pick
آب و برق و تخریب. ما همچنین روش رسیدگی به ویژگیهای غیراختیاری و کلیدهای پویا و تفاوتهای بین انواع و رابطها را دیدیم. در آخر روش استفاده از کتابخانه Lodash را برای حذف خواص توضیح دادیم.
منتشر شده در 1403-01-02 08:44:03