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 ใดก็ได้
- ไม่ควรใช้บ่อยเนื่องจากทำให้โค้ดไม่ปลอดภัย