ค้นหาเว็บไซต์

destructuring - Typescript ทำการแยกค่าที่คืนจากฟังก์ชันซึ่งสามารถเป็น void หรือวัตถุ


ฉันใช้แพ็กเกจที่มีฟังก์ชันด้วยการประกาศดังต่อไปนี้:

const getList: (params?: ListRequestParams | undefined) => Promise<void | {
    items: any[];
    pageInfo: PageInfo;
}>

ฉันพยายามจะแยกค่าที่ส่งกลับจากการเรียกใช้ฟังก์ชันนี้ด้วย:

const {items, pageInfo} = await getList(some_param);

แต่มันใช้งานไม่ได้ อาจเป็นเพราะส่วน 'void' การใช้ค่าชั่วคราวสามารถใช้ได้ แต่ดูงุ่มง่าม

const temp = await getList(some_params);

if(temp !== undefined)
{
  const { items, pageInfo } = temp;
}

แค่อยากรู้ว่ามีวิธีที่ดีกว่านี้ในการแยกโครงสร้างในกรณีนี้หรือไม่ ขอบคุณ

คำตอบ #1

จริง ๆ แล้ว เราไม่สามารถทำการแยกโครงสร้าง void/undefined ได้ และนั่นก็เป็นเรื่องดี: เป็นสิ่งจำเป็นที่จะต้องจัดการกับกรณีที่ void ถูกส่งกลับด้วย ในตัวอย่างของคุณกับเงื่อนไขป้องกัน if not undefined then ...

ถ้าคุณต้องการให้โค้ดของคุณมุ่งเน้นไปที่เส้นทางที่สำเร็จและหลีกเลี่ยงตัวแปรชั่วคราว คุณสามารถใช้ประเภท Maybe (npm) และวิธีการ map() ของมันได้:

Maybe
  .ofNullable(await getList(some_params))
  .map(({ items, pageInfo }) => { /*...*/ });