استفاده از نوع تلاقی TypeScript با یک Promise بومی و یک Promise جیکوئری به عنوان عملوند عبارت await
من قصد دارم از نوع تقاطع TypeScript به صورت زیر استفاده کنم:
Promise<void> & JQueryPromise<void>
بهعنوان یک عملوند از دستور await.
پس، کد من این است:
const test4 = async () => {
let p: Promise<void> & JQueryPromise<void>;
await p;
}
من @types/jquery را اضافه کردم تا IntelliSense برای jQuery دریافت کنم. اما، TypeScript خطای TS1320: نوع عملوند ‘await’ باید یا یک Promise معتبر باشد یا نباید شامل یک عضو قابل فراخوانی ‘then’ باشد. را میدهد.
اگر متغیر p را به عنوان ... اعلام کنم، خطایی وجود ندارد
فقط یک وعده بومی:
const test1 = async () => { let p: Promise<void>; await p; }فقط یک وعده jQuery:
const test2 = async () => { let p: JQueryPromise<void>; await p; }استفاده از یک نوع اتحادیه در تایپاسکریپت:
const test3 = async () => { let p: Promise<void> | JQueryPromise<void>; await p; }
شما میتوانید این خطا را در پروژه استکبلیتز ببینید.
من میتوانم با موفقیت از یک Promise در jQuery در عبارت await استفاده کنم. نمونه CodePen را ببینید. یک نوع اتحاد در TypeScript نیز به خوبی کار میکند. یک نوع اتحاد فقط اجازه استفاده از اعضای مشترک هر دو نوع را میدهد. یک نوع اشتراک اجازه استفاده از اعضای هر دو نوع را میدهد. پس چرا نوع اشتراک من کار نمیکند اگر فقط اعضای بیشتری نسبت به نوع اتحادم ارائه میدهد؟
علاوه بر این، چرا نوع اتحادی من then را به عنوان یک ویژگی برمیگرداند (که به نظر من نادرست است):
اما نوع تقاطعی من then را به عنوان یک متد برمیگرداند (که فکر میکنم درست است):
آیا این مسائل مرتبط هستند؟

