TypeScript มี type ของข้อมูลอยู่หลายประเภทที่ใช้ในการกำหนด type ของตัวแปร หรือค่าต่าง ๆ type ประเภททั่วๆ ไปอย่าง string, number, function ทุกคนคงเข้าใจกันแล้ว แต่ type ต่อไปนี้ คืออะไร

ขอสรุปไว้แบบสั้นๆ เอาไว้ทบทวนไวๆ

unknown

เป็น type ที่แทบจะเหมือนกับ any ในที่สุด, แต่มีความแตกต่างที่สำคัญ คือ unknown จะบังคับให้คุณทำการตรวจสอบ type ก่อนที่จะใช้ค่านั้น (type-check) โดยใช้ typeof, instanceof หรือการทำความเข้าใจกับ type นั้น ๆ ก่อนที่จะทำการใช้งาน

function getSomething(): unknown {
  // ตัวแปร `result` อาจเป็น null หรือ undefined
  const result = fetch("https://example.com");
  return result.json();
}

// ตัวแปร `result` ต้องมีค่าของประเภท `string` หรือ `undefined`
const result = getSomething();
if (result) {
  console.log(result);
}
  • สามารถใช้ได้กับค่าของ type อื่นได้ แต่ต้องตรวจสอบค่าก่อนใช้
  • แทนค่าที่อาจเป็น null หรือ undefined
  • สามารถใช้ได้กับค่า null และ undefined ได้โดยตรง

void

ใช้บ่งบอกว่าฟังก์ชันนี้ไม่ได้คืนค่า (return value) หรือ ถ้าตัวแปรไหนที่ถูกประกาศด้วย void จะไม่มีค่าใด ๆ เลย

ในกรณีที่ฟังก์ชันไม่ได้รับการระบุประเภทของ return value หรือมีคำว่า void, TypeScript จะตีความเป็นว่าฟังก์ชันนั้นมี void return type

// ฟังก์ชันนี้ไม่มีค่าส่งคืน
function doSomething(): void {
  // ...
}
  • ใช้แทนค่าที่ไม่มีประเภท
  • ไม่สามารถกำหนดค่าให้กับตัวแปรประเภท void ได้
  • สามารถใช้เป็นค่าส่งคืนของฟังก์ชันที่ไม่มีการคืนค่า

never

ใช้บ่งบอกว่าฟังก์ชันนี้จะไม่จบการทำงาน (never return) หรือถ้าตัวแปรไหนที่ถูกประกาศด้วย never จะไม่มีค่าเลย

never ใช้ในบางกรณีที่ฟังก์ชันจะเลิกทำงานไม่ได้ เช่น Throw Error, Infinite loop เป็นต้น

// ฟังก์ชันนี้ไม่สามารถเสร็จสมบูรณ์ได้
function neverReturn(): never {
  while (true) {
    // ...
  }
}
  • แทนค่าที่ไม่สามารถเกิดขึ้นได้
  • สามารถใช้เป็นค่าส่งคืนของฟังก์ชันที่ไม่สามารถเสร็จสมบูรณ์ได้

any

เป็นการทำงานโดยไม่จำเป็นต้องประกาศ type ของตัวแปร หรือค่านั้น ๆ ใน TypeScript ตัวแปรหรือค่าที่ถูกประกาศด้วย any จะสามารถเปลี่ยนประเภทได้ทุกรูปแบบ

// ตัวแปร `x` สามารถเป็นค่าของประเภทใดก็ได้
let x: any;
x = 1;
x = "Hello";
x = null;
  • แทนค่าของประเภทใดก็ได้
  • สามารถใช้ได้กับค่าของ type ใดก็ได้ โดยไม่ต้องตรวจสอบค่าก่อนใช้
  • ไม่ควรใช้บ่อยเนื่องจากทำให้โค้ดไม่ปลอดภัย
  • ปาป

null

เป็น type ที่ที่ใช้เพื่อบ่งบอกถึงการไม่มีค่า (null)

// ตัวแปร `y` อาจเป็น null หรือ undefined
let y: null | undefined;
y = null;
y = undefined;
  • แทนค่าที่หมายถึง null
  • สามารถใช้ได้กับค่าของ type ไหนก็ได้
  • ไม่ควรใช้บ่อยเนื่องจากทำให้โค้ดไม่ปลอดภัย

undefined

เป็น type ที่บ่งบอกถึงตัวแปรหรือค่าที่ยังไม่ได้ถูกกำหนดค่าใดๆ ไว้

// ตัวแปร `z` หมายถึงยังไม่ได้กำหนดค่า
let z: undefined;
  • แทนค่าที่ หมายถึง ยังไม่ได้กำหนดค่า
  • สามารถใช้ได้กับค่าของ type ใดก็ได้
  • ไม่ควรใช้บ่อยเนื่องจากทำให้โค้ดไม่ปลอดภัย