โปรดทราบว่าการใช้const user = {} as UserTypeเพียงแค่ให้ intellisense แต่ที่รันไทม์userเป็นวัตถุว่างเปล่า{}และไม่มีคุณสมบัติอยู่ภายใน นั่นหมายความว่าuser.Emailจะให้undefinedแทน""
type UserType = {
Username: string;
Email: string;
}
ดังนั้นใช้classกับconstructorการสร้างวัตถุที่มีคุณสมบัติเริ่มต้นจริงๆ
type UserType = {
Username: string;
Email: string;
};
class User implements UserType {
constructor() {
this.Username = "";
this.Email = "";
}
Username: string;
Email: string;
}
const myUser = new User();
console.log(myUser);
console.log("val: "+myUser.Email);
คุณยังสามารถใช้interfaceแทนไฟล์type
interface UserType {
Username: string;
Email: string;
};
... และรหัสที่เหลือยังคงเหมือนเดิม
จริงๆแล้วคุณสามารถข้ามconstructorส่วนและใช้งานได้ดังนี้:
class User implements UserType {
Username = "";
Email: string;
}
const myUser = new User();
console.log(myUser);
userจะต้องการเป็นประเภทUser | {}หรือPartial<User>หรือคุณต้องกำหนดUserประเภทใหม่เพื่อให้วัตถุว่างเปล่า ตอนนี้คอมไพเลอร์บอกคุณได้อย่างถูกต้องว่าuserไม่ใช่ไฟล์User.