any
พิมพ์:
any
ประเภทแทนค่า JS เป็นไปได้ทั้งหมด ทุกประเภทสามารถกำหนดให้พิมพ์any
ได้ ดังนั้นประเภทany
จึงเป็น supertype สากลของระบบประเภท คอมไพเลอร์ทีเอสจะช่วยให้การดำเนินการใด ๆ any
เกี่ยวกับค่าพิมพ์ ตัวอย่างเช่น:
let myVar: any;
myVar[0];
myVar();
myVar.length;
new myVar();
ในหลาย ๆ ครั้งนี่เป็นเรื่องอ่อนโยนเกินไปสำหรับคอมไพเลอร์ TS นั่นคือจะช่วยให้การดำเนินงานที่เราอาจจะรู้ว่าเป็นผลให้เกิดข้อผิดพลาด runtime
unknown
พิมพ์:
unknown
ประเภทหมายถึง (เช่นเดียวany
) เป็นไปได้ที่ค่า JS ทั้งหมด ทุกประเภทสามารถกำหนดให้พิมพ์unknown
ได้ ดังนั้นประเภทunknown
จึงเป็น supertype สากลอื่นของระบบประเภท (ด้านข้างany
) แต่คอมไพเลอร์ทีเอสจะไม่อนุญาตให้มีการดำเนินการใด ๆ unknown
กับค่าพิมพ์ นอกจากนี้unknown
ประเภทสามารถกำหนดให้กับประเภทany
ได้เท่านั้น ตัวอย่างจะอธิบายสิ่งนี้:
let myVar: unknown;
let myVar1: unknown = myVar; // No error
let myVar2: any = myVar; // No error
let myVar3: boolean = myVar; // Type 'unknown' is not assignable to type 'boolean'
// The following operations on myVar all give the error:
// Object is of type 'unknown'
myVar[0];
myVar();
myVar.length;
new myVar();
any
เป็นเหมือนdynamic
และเป็นเหมือนunknown
object
ฉันชอบunknown
เพราะมันปลอดภัยกว่า แม้ว่าชื่อที่สับสน