چگونه میتوان یک نوع را از یک نوع اتحاد برچسبدار در تایپاسکریپت استخراج کرد؟
فرض کنید که قبلاً یک نوع به این صورت تعریف شده است:
export type Item = {
type: 'text',
content: string
} | {
type: 'link',
url: string
}
آیا امکان استخراج بخش link از نوع Item وجود دارد؟ منظورم این است که آیا ممکن است یک نوع ExtractTypeFrom تعریف کرد:
type LinkItem = ExtractType<Item, 'type', 'link'>
و LinkItem خواهد بود:
{
type: 'link',
url: string
}
پاسخ شماره ۱
بله، ممکن است، شما بسیار نزدیک هستید، میتوانید از نوع شرطی از پیش تعریف شده Extract استفاده کنید. شما نیاز خواهید داشت که به عنوان آرگومان دوم، نوعی را وارد کنید که بتواند نوع پایهای برای نوعی که به دنبال آن هستید باشد:
type LinkItem = Extract<Item, { type: 'link' }> // will be { type: "link"; url: string; }
