วิธีเพิ่มชนิดให้กับ `...args` ใน TypeScript
ฉันมีฟังก์ชันแบบนี้
function foobar(...args): any {
....
}
ลายเซ็นของฟังก์ชันค่อนข้างทั่วไป แต่จะรับเพียงสตริงและสุดท้ายวัตถุประเภท X เท่านั้น (ทั้งหมดเป็นตัวเลือก)
foobar();
foobar('a');
foobar('a', 'b', 'c');
foobar('a', { ... });
foonbar('a', 'b', { ... });
มีวิธีใดบ้างที่จะเพิ่มประเภทได้ ตัวอย่างเช่น
function foobar(...args: [...string, X]) { // this doesn't work!
}
มีข้อเสนอแนะอะไรไหม?
คำตอบ #1
คุณสามารถตั้งค่าประเภทใดก็ได้ที่คุณต้องการสำหรับอาร์กิวเมนต์การกระจาย ...args แต่ มันต้องเป็นอาร์เรย์ของบางสิ่งบางอย่าง
เช่น
function foobar(...args: string[]): any {
....
}
ในกรณีของคุณ ไม่มีวิธีระบุประเภทเฉพาะสำหรับวัตถุล่าสุด แต่คุณสามารถทำอะไรบางอย่างเช่น
function foobar(...args: Array<string | IYourCustomType>): any {
....
}
โดยทั่วไปแล้ว การปฏิบัติที่พบบ่อยคือการวางอาร์กิวเมนต์ที่คงที่ไว้ก่อนและอาร์กิวเมนต์ที่เป็นทางเลือกไว้ทีหลัง ดังนั้นฉันจึงจะเขียนฟังก์ชันใหม่เป็น
function foobar(obj: IYourCustomType, ...args: string[]): any {
....
}
คำตอบ #2
ตั้งแต่นั้นมามีการปรับปรุงความสามารถของ TypeScript ในการพิมพ์ทูเพิล ตอนนี้คุณสามารถพิมพ์แต่ละองค์ประกอบได้อย่างเฉพาะเจาะจง แหล่งที่มา: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-0.html
function getSomething(tuple: [string, boolean]): any => { ... }
