Literal Types

ไม่รู้จะแปลไทยยังไงดี...

นอกจาก interface แล้ว เรายังสามารถสร้าง Type ใหม่ด้วยคีย์เวิร์ด type ได้เช่นกัน โดยความแตกต่างคีอ interface ใช้สร้าง Type สำหรับ Object หรือ Class แต่ type จะสามารถกำหนดเป็นค่าแบบตรงตัว (Literal) ได้เลย

สรุปง่ายๆ ว่ามันคือการประกาศตัวแปรให้เป็น type เพื่อที่จะนำไปใช้ต่อ

type Hello = string           // ให้ type Hello เป็น string
const a: Hello = "World"      // ใช้งาน type Hello

type Hi = "Hi"                // ให้ type Hi เป็น "Hi" แบบตรงตัว
const b: Hi = "Hi"
const c: Hi = "Hello"         // Error : เพราะค่าต้องเป็น "Hi" แบบตรงตัวเท่านั้น

ประโยชน์ของ Literal Type คือเราสามารถใช้ Union | ได้ เพื่อกำหนดให้ Type เป็นค่าใดค่าหนึ่ง

type Hi = "Hi" | "Hello"     //  type Hi เป็นคำว่า "Hi" หรือ "Hello" ก็ได้

type Dice =                  // type Dice ต้องเป็นเลข 1-6
  | 1                        // เขียนแบบหลายบรรทัด
  | 2 
  | 3 
  | 4 
  | 5 
  | 6

หรือจะใช้ Union กับตัว Type อื่นๆ ก็ยังได้

type NotNumber = string | boolean | array 
// ต้องมี type string หรือ boolean หรือ array

Literal Narrowing

การต้ังค่าคงที่ const นั้นจะทำให้ Type เป็นแบบ Literal ส่วนการตั้งตัวแปรแบบ let หรือ var นั้นจะเป็น Type แบบปกติ ซึ่งเปลี่ยนค่าได้ เช่น

const x = "ABC"    // x มี Type เป็น "ABC" ซึ่งเป็น Literal เพราะใช้ const
x = "DEF"          // ❌ เปลี่ยนค่า x ไม่ได้ เพราะต้องเป็น "ABC" เสมอ

let y = "XYZ"      // y มี Type เป็น string เพราะเปลี่ยนเป็นค่าอื่นได้เนื่องจากใช้ let
y = "ABC"          // ✅ เปลี่ยนค่า y ได้ เพราะยังเป็น string อยู่

Last updated