menu

การโอเวอร์โหลดฟังก์ชันใน TypeScript

บางครั้งเราก็พบเจอกับฟังก์ชันที่ ส่งคืนค่าที่มีประเภทขึ้นอยู่กับ พารามิเตอร์ที่ส่งเข้าไป เพื่อการนี้ใน TypeScript จึงใช้ การโอเวอร์โหลด ของฟังก์ชัน ซึ่งช่วยให้สามารถระบุ รูปแบบของซิกเนเจอร์ของฟังก์ชันที่แตกต่างกันได้

ลองมาดูตัวอย่างกัน สมมติว่าเรามี ฟังก์ชันที่แยกอักขระ ของสตริงออกเป็นอาร์เรย์ของตัวอักษร:

function splitStr(str: string): string[] { return str.split(''); }

และสมมติว่าเรามีฟังก์ชันที่ แยกอักขระของตัวเลขออกเป็นอาร์เรย์ของตัวเลข:

function splitNum(num: number): number[] { let str: string = String(num); let arr: string[] = str.split(''); return arr.map(elem => +elem); }

ลองรวมทั้งสองฟังก์ชันเข้าด้วยกัน ฟังก์ชันใหม่ นี้ควรจะส่งคืนอาร์เรย์ของตัวเลขหรืออาร์เรย์ของสตริง ขึ้นอยู่กับประเภทของพารามิเตอร์

มาใช้การโอเวอร์โหลดเพื่อประกาศ ซิกเนเจอร์ต่างๆ ของฟังก์ชันของเรากัน:

function splitVal(val: number): number[]; function splitVal(val: string): string[] { // รหัสการทำงานของทั้งสองซิกเนเจอร์ }

ตอนนี้มาเขียนโค้ดการทำงานของฟังก์ชันกัน ใน โค้ดของมัน เราต้องตรวจสอบด้วยเงื่อนไขว่าซิกเนเจอร์ ใดของฟังก์ชันที่ทำงาน และจากนั้น เรียกใช้งานโค้ดที่ต้องการพร้อมกับผลลัพธ์ ประเภทที่ต้องการ:

function splitVal(val: number): number[]; function splitVal(val: string): string[] { if (typeof val === 'string') { return val.split(''); } else { let str: string = String(val); let arr: string[] = str.split(''); return arr.map((elem: string): number => +elem); } }

แตกต่างจากภาษาอื่น ใน TypeScript การโอเวอร์โหลดสร้างขึ้นเป็นฟังก์ชันเดียว ไม่สามารถ สร้างหลายฟังก์ชันด้วยชื่อเดียวกัน แต่มีซิกเนเจอร์ที่แตกต่างกันได้

เขียนฟังก์ชันที่จะส่งคืน หรือแก้ไขข้อความขององค์ประกอบ DOM โดยควร ทำงานดังต่อไปนี้:

text('#elem', 'text'); // ตั้งค่าข้อความ text('#elem'); // ส่งคืนข้อความปัจจุบัน
ไทย
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣTürkmenTürkçeЎзбекOʻzbekTiếng Việt
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ