Conditional types ใน TypeScript

14 Aug 2023,
Share: 
Cover image

สวัสดีครับ ในบทความนี้เราจะมาเรียนรู้เรื่อง Conditional types ใน TypeScript ว่าคืออะไร นำไปใช้ประโยชน์ได้อย่างไร

Conditional Types จะช่วยให้เราสามารถกําหนดความสัมพันธ์ระหว่าง input type และ output type

เรามาดูตัวอย่าง Conditional Types ง่ายๆดังนี้ครับ

interface Animal {
  live(): void;
}
interface Dog extends Animal {
  woof(): void;
}

type Example1 = Dog extends Animal ? number : string; // Example1 จะมี type เป็น number
type Example2 = RegExp extends Animal ? number : string; // Example2 จะมี type เป็น string

จาก Code ด้านบน จะเห็นว่า เราสามารถใส่ Condition เพื่อเลือกระหว่าง type string และ number ได้

เพื่อความเข้าใจมากขึ้น เรามาดูอีกตัวอย่างกันครับ

interface IdLabel {
  id: number /* some fields */;
}
interface NameLabel {
  name: string /* other fields */;
}
type NameOrId<T extends number | string> = T extends number ? IdLabel : NameLabel;
// ---cut---
function createLabel<T extends number | string>(idOrName: T): NameOrId<T> {
  throw 'unimplemented';
}

let a = createLabel('typescript'); // a จะมี type เป็น NameLabel

let b = createLabel(2.8); // a จะมี type เป็น IdLabel

let c = createLabel(Math.random() ? 'hello' : 42); // a จะมี type เป็น NameLabel | IdLabel

จาก Code ด้านบน จะเห็นว่า Return type จาก Function “createLabel” จะขึ้นอยู่กับ Input Parameter ที่รับเข้ามา

Conditional Type Constraints

บางครั้งเราอาจจะจําเป็นต้องกําหนด Condition เพิ่มเติมเข้าไปใน Generic type

ตัวอย่างเช่น ถ้าเราต้องการ Type อะไรก็ได้ที่อย่างน้อยต้องมี property “message” เราสามารถเขียน Code ได้ตามนี้

type MessageOf<T extends { message: unknown }> = T['message'];

interface Email {
  message: string;
}

type EmailMessageContents = MessageOf<Email>;

Suggestion blogs

ใช้ Docker volume อย่างไรให้ยกเว้น Sub folder

สวัสดีครับ เมื่อเรา Map volume ของ Folder บน Local เข้ากับ Folder บน Container แล้ว สิ่งที่เกิดขึ้นคือ Folder บน Container จะถูกแทนที่ด้วย Folder บน Local บางครั้งเราอยากจะยกเว้น บาง Sub folder บน Container ไม่ต้องการให้ถูกเขียนทับด้วย Sub folder ของ Local เพื่อให้เข้าใจมากขึ้น มาดูกรณีศึกษานี้กันครับ

การเข้ารหัสข้อมูลแบบอสมมาตร (Asymmetric key)

อัลกอริทึมนี้จะใช้กุญแจสองตัวเพื่อทำงาน ตัวหนึ่งใช้ในการเข้ารหัสและอีกตัวหนึ่งใช้ในการถอดรหัสข้อมูลที่เข้ารหัสมา โดยกุญแจตัวแรก คือ กุญแจสาธารณะ (Public keys) ซึ่งจะเป็นกุญแจที่ใช้ในการเข้ารหัสข้อมูล กุญแจตัวที่สองคือ กุญแจส่วนตัว (Private keys) ซึ่งจะเป็นกุญแจที่ใช้ในการถอดรหัส อ่านๆไปแล้วอาจจะงงว่าจะเอาไปใช้ได้อย่างไร เรามาดูการทํางานกันดีกว่า

LED แอลอีดี คืออะไร

ความเป็นมาของ LEDLED ได้ถูกนํามาใช้ในแผงวงจรครั้งแรกเมื่อปี 1962 ซึ่งในตอนนั้น LED จะให้ความเข้มของแสงไม่มากนัก และมีเฉพาะ ความถี่ในช่วงแสง infrared ไม่สามารถมองเห็นด้วยตาเปล่า มักจะใช้กับอุปกรณ์ประเภทรีโมทคอนโทรลต่างๆ ต่อมา LED ถูกพัฒนาขึ้นมาเรื่อยๆจนสามารถเปล่งแสงได้ครอบคุมตั้งแต่ย่าน infrared แสงที่มองห็นไปจนถึงย่าน ultra violet หรือ UV ในปัจจุบัน LED ถูกพัฒนาจนมีความเข้มของแสงสูงมาก และสามารถให้แสงสีขาวได้ จนสามารถนํามาใช้แทนหลอดไฟส่องสว่างที่มีใช้อยู่ในปัจจุบัน


Copyright © 2019 - 2025 thiti.dev |  v1.51.0 |  Privacy policy | 

Build with ❤️ and Astro.

Github profile   Linkedin profile   Instagram   X profile   Nostr   Youtube channel   Telegram   Email contact   วงแหวนเว็บ