انتخاب عنصر از یونین تایپاسکریپت بر اساس مقدار آن
من اتحادیهای به این شکل دارم:
type Message =
| { type: 'first', someParam: any } // let it be AMsg
| { type: 'second', someAnotherParam: any, andOneAnother: any }
میخواهم یکی از عناصر این اتحاد را به صورت یک نوع جداگانه مانند این به دست بیاورم:
type AMsg = MessageOfType<'first'> // = { type: 'first', someParam: any }
من تلاش کردهام پیام نوع خودم را بنویسم:
type MessageOfType<T extends Message['type']> = Message['type'] extends T ? Message : never
اما همیشه هرگز برمیگرداند.
برای گرفتن یک عنصر یا چند عنصر با type که با مقدار مورد نیاز از اتحاد مطابقت دارد، باید از چه چیزی استفاده کنم؟
پاسخ شماره ۱
شما میتوانید برای این کار از نوع شرطی از پیش تعریفشده Extract استفاده کنید:
type Message =
| { type: 'first', someParam: any } // let it be AMsg
| { type: 'second', someAnotherParam: any, andOneAnother: any }
type AMsg = Extract<Message, { type: 'first' }>
پیوند زمین بازی
پاسخ شماره ۲
به جای انجام حرکات آکروباتیک نوع، ممکن است بخواهید بازسازی کنید:
type Message = AMsg | BMsg
type AMsg = { type: 'first', someParam: any }
type BMsg = { type: 'second', someAnotherParam: any, andOneAnother: any }
لینک زمین بازی
