ข้อจำกัดของ Generics ใน TypeScript
ในหนึ่งในบทเรียนก่อนหน้านี้ เราได้สร้าง ฟังก์ชันประเภททั่วไปที่ควรจะ แสดงความยาวของพารามิเตอร์ที่ส่งเข้าไป อย่างไรก็ตาม ในระหว่างการคอมไพล์ เรา ได้รับข้อผิดพลาด เนื่องจากไม่ใช่ทุกประเภท ที่จะมีความยาวได้:
function myFunc < T > (data: T): T {
console.log(data.length); // ข้อผิดพลาด
return data;
}
ในกรณีนั้นเราแก้ไขสถานการณ์โดยเปลี่ยน
ประเภททั่วไปเป็นประเภทของอาร์เรย์ทั่วไป
แต่ใน TypeScript มีความเป็นไปได้ที่จะสร้าง
ข้อจำกัดให้กับ Generics ได้ ในการทำเช่นนี้ ในเครื่องมุม
หลังตัวแปร T เราเขียน
คำหลัก extends หลังจากนั้น
ในวงเล็บปีกกาเรากำหนดตัวแปรใหม่
str ที่เป็นประเภทสตริง
โค้ดที่เหลือของฟังก์ชันจะยังคงเหมือนเดิม
โดยไม่มีการเปลี่ยนแปลง:
function myFunc <T extends {str: string}> (data: T): void {
console.log(data.str.length);
}
ดังนั้น ประเภททั่วไปจะสืบทอดประเภทของ
ตัวแปร str ที่ระบุในวงเล็บปีกกา
ตอนนี้มาทดสอบการทำงานของ
ฟังก์ชันของเรากัน และสร้างตัวแปร myStr
ที่อ้างอิงถึงประเภท str และกำหนด
ค่าให้มันในวงเล็บปีกกา:
let myStr: {str: string} = {str: 'abcde'};
ลองเรียกใช้ฟังก์ชัน myFunc อย่า
ลืมระบุประเภทของมันอีกครั้ง และส่ง
ตัวแปร myStr เป็นพารามิเตอร์:
myFunc <{str: string}> (myStr);
จากตัวอย่างที่พิจารณาในบทเรียน กำหนดฟังก์ชันสำหรับหาความยาวของ อาร์เรย์ตัวเลข