تایپ Partial در تایپ اسکریپت یک تایپ کاربردی است که دقیقا کار متضاد Required را انجام می‌دهد. یعنی، تمام ویژگی‌های یک تایپ را به صورت اختیاری تنظیم می‌کند. در این مقاله قصد داریم تا روش کارکرد تایپ Partial در تایپ اسکریپت را باهم بررسی کنیم.

تایپ Partial در تایپ اسکریپت

ما در تایپ اسکریپت می‌توانیم یک تایپ را با استفاده از یک ? به صورت اختیاری تعریف کنیم. به عنوان مثال، در کد زیر lastName اختیاری است. بنابراین، حتی اگر firstUser دارای تایپ User هم باشد، می‌توانیم lastName را حذف کنیم زیرا، یک ویژگی اختیاری می‌باشد و وجود آن ضروری نیست.

type User = {
    firstName: string,
    lastName?: string
}

let firstUser:User = {
    firstName: "John"
}

گاهی اوقات، ممکن است تایپی که در کد به ارث می‌بریم یا از آن استفاده می‌کنیم تایپ‌های اختیاری نداشته باشد، اما می‌دانیم که در شرایط خاصی این احتمال وجود دارد که برخی از ویژگی‌ها از بین رفته باشند. به عنوان مثال در قطعه کد زیر، lastName دیگر ویژگی اختیاری نیست، اما firstUser آن را شامل نمی‌شود:

type User = {
    firstName: string,
    lastName: string
}

let firstUser:User = {
    firstName: "John"
}

اگر این کد را اجرا کنیم با یک خطا روبه‌رو می‌شویم، زیرا انتظار داریم که firstUser از تایپ User، حتما ویژگی lastName را دارا باشد:

Property `lastName` is missing in type `{ firstName: string; }` but required in type `User`.

اگر بخواهیم از بروز چنین خطایی جلوگیری کنیم، باید تایپ firstUser را به Partial<User> تغییر دهیم. در نتیجه این کار، به تایپ اسکریپت می‌گوییم که هر ویژگی در تایپ User را به صورت اختیاری تنظیم کند:

type User = {
    firstName: string,
    lastName: string
}

let firstUser:Partial<User> = {
    firstName: "John"
}

در نهایت، تعریف مجدد تایپ User به صورت زیر می‌باشد:

type User = {
    firstName?: string,
    lastName?: string
}

تنها تفاوت بین این دو کد این است که ما اکنون می‌توانیم از هر دو آن‌ها استفاده کنیم. اگر بخواهیم تایپی که داریم ویژگی‌های از بین رفته را داشته باشد، می‌توانیم از Partial استفاده کنیم. اگر این کار را نکنیم، فقط می‌توانیم از تایپ User معمولی بهره‌مند شویم:

type User = { 
    firstName: string, 
    lastName: string 
}
let firstUser:Partial<User> = { firstName: "John" } 
let secondUser:User = { firstName: "John", lastName: "Doe" }

جمع‌بندی

تایپ Partial مانند بسیاری دیگر از تایپ‌های utility در تایپ اسکریپت، مناسب برای کار با interfaceها یا تایپ‌های سفارشی هستند. در این مقاله سعی کردیم بیشتر با تایپ Partial و روش کارکرد آن آشنا شویم.