از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
روش اضافه کردن یک ویژگی به یک شی در TypeScript
سرفصلهای مطلب
معرفی
در TypeScript، اشیاء یک بلوک ساختمانی اساسی هستند. آنها محفظه هایی هستند که برای گروه بندی متغیرها و توابع مرتبط استفاده می کنیم و ساختاری را ایجاد می کنیم که درک و مدیریت آن آسان باشد. اما آیا تا به حال نیاز به اضافه کردن یک ویژگی به یک شی موجود در TypeScript داشته اید؟ اگر چنین است، ممکن است با مشکلاتی روبرو شده باشید.
این بایت شما را راهنمایی می کند process اضافه کردن یک ویژگی به یک شی در TypeScript.
اشیاء در TypeScript
قبل از اینکه به موضوع اصلی بپردازیم، اجازه دهید به سرعت بررسی کنیم که چه اشیایی در TypeScript هستند. یک شی در TypeScript نمونه ای است که شامل مجموعه ای از جفت های کلید-مقدار است. مقادیر می توانند مقادیر یا توابع اسکالر یا حتی آرایه ای از اشیاء دیگر باشند.
let person = {
firstName: "John",
lastName: "Doe",
age: 25
};
اینجا، person
یک شی است. شی دارای سه ویژگی است: firstName
، lastName
، و age
. هر ملک دارای یک ارزش است. firstName
“جان” است، lastName
“Doe” است، و age
25 است.
چرا این کار در TypeScript دشوار است؟
در جاوا اسکریپت ساده، افزودن یک ویژگی به یک شی به سادگی نوشتن است person.middleName = "William"
. با این حال، TypeScript یک ابر مجموعه ایستا تایپ شده از جاوا اسکریپت است، به این معنی که انواع را به زبان اضافه و اجرا می کند. این برای تشخیص زودهنگام خطاها و قویتر کردن کد شما عالی است، اما به این معنی است که نمیتوانید خواه ناخواه فقط ویژگیها را به یک شی اضافه کنید.
اگر بخواهید یک ویژگی را به شی ای اضافه کنید که در زمان نمونه سازی آن شی تعریف نشده است، TypeScript با خطا مواجه می شود. این به این دلیل است که سیستم تایپ استاتیک TypeScript انتظار دارد که اشیاء به شکل خاصی بچسبند.
افزودن یک ویژگی به یک شی
بنابراین، آیا امکان افزودن یک ویژگی به یک شی در TypeScript وجود دارد؟ آره! یک راه این است که شی را با امضای شاخص تعریف کنیم. امضای شاخص راهی برای گفتن به TypeScript است که یک شی می تواند هر تعداد خاصیت داشته باشد. در اینجا روش کار آن آمده است:
let person: { (key: string): any } = {
firstName: "John",
lastName: "Doe",
age: 25
};
person.middleName = "William"; // This works!
در این مثال تعریف کرده ایم person
به عنوان یک شی که می تواند هر تعداد خاصیت داشته باشد، هر کدام دارای یک string
کلید و هر نوع مقدار اکنون می توانیم a اضافه کنیم middleName
دارایی به person
بدون اینکه TypeScript خطا بدهد.
راه دیگر برای افزودن یک ویژگی به یک شی در TypeScript استفاده از نوع ادعا است:
let person = {
firstName: "John",
lastName: "Doe",
age: 25
} as any;
person.middleName = "William"; // This also works!
ما از Type Assertion استفاده می کنیم تا به TypeScript بگوییم که درمان کند person
مانند any
، به طور مؤثر بررسی نوع را خاموش می کند person
. به این ترتیب می توانیم a اضافه کنیم middleName
دارایی به person
.
در حالی که این راه حل ها کار می کنند، اما یک نقطه ضعف دارند: آنها می توانند کد شما را ایمن تر کنند. با اجازه دادن به هر ویژگی برای اضافه شدن به یک شی، برخی از مزایای تایپ استاتیک TypeScript را از دست می دهید. بنابراین، از این راه حل ها با احتیاط استفاده کنید، و تنها زمانی که واقعاً به انعطاف پذیری آنها نیاز دارید.
سایر دستکاری های شی
افزودن یک ویژگی به یک شی تنها چیزی نیست که ممکن است بخواهیم در مورد یک شی تغییر دهیم. چندین راه دیگر برای دستکاری اشیاء مطابق با نیازهای شما وجود دارد که هر کدام مجموعه ای از موارد استفاده منحصر به فرد خود را دارند.
افزودن چندین ویژگی جدید
اگر بخواهیم چندین ویژگی را به شیء خود اضافه کنیم، میتوانیم شیء را به نوعی بفرستیم که ویژگیهای اضافی را از طریق امضاهای شاخص یا استفاده از آنها اجازه دهد. any
.
interface Person {
name: string;
}
let obj: Person = { name: 'John' };
// Cast to a type that allows additional properties
let extendedObj = obj as any;
extendedObj.age = 30;
extendedObj.city = 'New York';
console.log(extendedObj); // Output: { name: 'John', age: 30, city: 'New York' }
یا میتونی استفاده کنی Object.assign()
:
Object.assign(extendedObj, { profession: 'Engineer', country: 'USA' });
console.log(extendedObj); // Output: { name: 'John', age: 30, city: 'New York', profession: 'Engineer', country: 'USA' }
افزودن ویژگی های تودرتو
افزودن ویژگیهای تودرتو جدید به یک شی موجود نیز نیاز به کنترل اضافی در TypeScript دارد. دوباره، میتوانید شی را به آن ارسال کنید any
یا نوعی که به ویژگی های تو در تو اضافی اجازه می دهد.
interface Person {
name: string;
}
let obj: Person = { name: 'John' };
// Cast to a type that allows additional nested properties
let extendedObj = obj as any;
// Initialize nested object and add property
extendedObj.address = {};
extendedObj.address.city = 'New York';
console.log(extendedObj); // Output: { name: 'John', address: { city: 'New York' } }
با استفاده از نوع ریخته گری TypeScript، می توانید سیستم نوع را دور بزنید تا به صورت پویا ویژگی های جدید را به اشیا اضافه کنید.
نتیجه
در این بایت، روش اضافه کردن یک ویژگی به یک شی در TypeScript و همچنین راه حل ها و موارد استفاده مشابه دیگر را نشان دادیم. ما دیدیم که چگونه با استفاده از چندین ویژگی به طور همزمان اضافه کنیم Object.assign()
و روش اضافه کردن ویژگی های تو در تو.
منتشر شده در 1402-12-27 16:05:04