คลาสเจเนอริกใน TypeScript
นอกจากอินเทอร์เฟซเจเนอริกแล้ว ใน TypeScript ยังสามารถสร้างคลาสเจเนอริกได้อีกด้วย
มาสร้างคลาส User แบบเจเนอริก
กัน เขียนคุณสมบัติ value
ประเภทเจเนอริกและสร้าง
คอนสตรัคเตอร์ที่เกี่ยวข้อง:
class User <T> {
value: T;
constructor(userData: T) {
this.value = userData;
}
}
ตอนนี้มาสร้างอ็อบเจกต์ของคลาสนี้และ กำหนดค่า string ให้กับคุณสมบัติของมัน:
let user = new User('john');
console.log(user.value); // 'john'
อย่างไรก็ตาม ถ้าเรากำหนดค่า string ให้กับอ็อบเจกต์ตอนสร้าง แล้ว เราจะไม่สามารถเขียนทับค่านั้นด้วยประเภทอื่นได้:
let user = new User('john');
user.value = 35;
เมื่อพยายามรันโค้ด เราจะเห็นข้อผิดพลาดดังต่อไปนี้:
Type 'number' is not assignable to type 'string'.
แต่ในขณะเดียวกัน เราสามารถเขียนทับค่า string ได้:
let user = new User('john');
user.value = 'alex';
console.log(user.value); // 'alex'
สังเกตว่า เราไม่สามารถเขียนทับคุณสมบัติของ อ็อบเจกต์เดียวกันด้วยประเภทอื่นได้ แต่เราสามารถสร้างอ็อบเจกต์อื่นขึ้นมาใหม่ได้:
let newUser = new User(35);
console.log(newUser.value); // 35