ให้ TypeScript หาชนิดข้อมูลด้วยการอนุมาน และเข้าใจว่าทำไม unknown จึงดีกว่า any ที่อันตราย
เปิดบทเรียนนี้ใน Kodokonข่าวดี: คุณไม่จำเป็นต้องระบุชนิดให้ทุกตัวแปร ด้วย การอนุมานชนิด (type inference) TypeScript หาชนิดของตัวแปรได้จากค่าที่คุณให้มัน เขียนแค่ let city = "Lyon" ก็เพียงพอ: TypeScript รู้ว่า city เป็น string และปกป้องมันราวกับว่าคุณได้ระบุชนิดไว้แล้ว
let city = "Lyon"; // inferred type: string
let count = 3; // inferred type: number
count = count + 1; // accepted
// city = 42; -> error: city is still a stringชนิด any หมายถึง "อะไรก็ได้" ตัวแปรชนิด any หลบเลี่ยงการตรวจสอบ ทั้งหมด: TypeScript ยอมรับทุกอย่างโดยไม่ตรวจสอบ มันเหมือนการถอดเข็มขัดนิรภัย: โค้ดคอมไพล์ได้ แต่ข้อผิดพลาดกลับมาขณะรัน ซึ่งเป็นสิ่งที่ TypeScript ควรจะป้องกันไว้พอดี
let data: any = "hello";
data = 42; // accepted without complaint
// Compiles, but crashes at runtime:
// data.toUpperCase() does not exist on a number!สำหรับค่าที่ไม่รู้ชนิดจริง ๆ (การตอบกลับจากเซิร์ฟเวอร์ ข้อมูลที่ผู้ใช้ป้อน) ให้เลือกใช้ unknown เช่นเดียวกับ any มันยอมรับค่าใด ๆ ก็ได้ แต่มัน บังคับให้คุณตรวจสอบชนิด (เช่น ด้วย typeof) ก่อนใช้งาน ความปลอดภัยจึงยังคงอยู่ครบ
let value: unknown = "hello";
// console.log(value.toUpperCase()); -> rejected!
if (typeof value === "string") {
console.log(value.toUpperCase()); // "HELLO"
}