บทที่ 5: JavaScript & TypeScript
“บ้านที่มีแค่ผนังกับหลังคา ก็แค่ที่พักพิง บ้านที่มีไฟฟ้า คือบ้านที่มีชีวิต”
The Blueprint (พิมพ์เขียว)
Section titled “The Blueprint (พิมพ์เขียว)”HTML คือโครงสร้าง CSS คือการตกแต่ง แต่ทั้งสองอย่างยัง “นิ่ง”
เว็บไซต์ที่ดีต้อง “ตอบสนอง”:
- คลิกปุ่ม → บางอย่างเกิดขึ้น
- พิมพ์ในช่อง → ข้อความปรากฏ
- เลื่อนหน้า → Animation เล่น
JavaScript = ระบบไฟฟ้า ที่ทำให้บ้านมีชีวิต
The Construction Site (หน้างานก่อสร้าง)
Section titled “The Construction Site (หน้างานก่อสร้าง)”⚡ JavaScript — ระบบไฟฟ้าของบ้าน
Section titled “⚡ JavaScript — ระบบไฟฟ้าของบ้าน”// เมื่อกดสวิตช์ → ไฟเปิดdocument.querySelector('#switch').addEventListener('click', () => { document.querySelector('#light').classList.toggle('on');});
// เมื่อพิมพ์ → แสดงผลconst input = document.querySelector('#search');input.addEventListener('input', (e) => { console.log('คุณกำลังค้นหา:', e.target.value);});🎯 JavaScript สิ่งที่ทำได้
Section titled “🎯 JavaScript สิ่งที่ทำได้”| Action | ในบ้าน | ในเว็บ |
|---|---|---|
| Click | กดสวิตช์ | กดปุ่ม |
| Input | หมุนวอลุ่ม | พิมพ์ข้อความ |
| Scroll | เดินในบ้าน | เลื่อนหน้า |
| Timer | นาฬิกาปลุก | Countdown |
| Network | สั่งของออนไลน์ | ดึงข้อมูล API |
🔷 TypeScript — มาตรฐานความปลอดภัยระบบไฟ
Section titled “🔷 TypeScript — มาตรฐานความปลอดภัยระบบไฟ”// JavaScript - ไม่มี Typefunction greet(name) { return "Hello " + name;}greet(123); // ทำงานได้ แต่ผิดหลัก
// TypeScript - มี Typefunction greet(name: string): string { return "Hello " + name;}greet(123); // ❌ Error! ต้องเป็น stringTypeScript = Blueprint ระบบไฟ ที่ระบุว่าสายไหนต่อกับอะไร ห้ามต่อผิดประเภท
📊 JavaScript vs TypeScript
Section titled “📊 JavaScript vs TypeScript”| Feature | JavaScript | TypeScript |
|---|---|---|
| Type Safety | ❌ | ✅ |
| IDE Support | ปานกลาง | ดีมาก |
| Bug Prevention | น้อย | มาก |
| Build Step | ไม่จำเป็น | จำเป็น |
Material Selection (เลือกสเปกวัสดุ)
Section titled “Material Selection (เลือกสเปกวัสดุ)”🛠️ Modern JavaScript (ES6+)
Section titled “🛠️ Modern JavaScript (ES6+)”// Arrow Functionsconst add = (a, b) => a + b;
// Destructuringconst { name, age } = user;
// Template Literalsconst message = `Hello ${name}, you are ${age}`;
// Async/Awaitconst fetchUser = async () => { const response = await fetch('/api/user'); const data = await response.json(); return data;};
// Spread Operatorconst newArray = [...oldArray, newItem];📝 TypeScript Basics
Section titled “📝 TypeScript Basics”// Type Annotationslet name: string = "สมชาย";let age: number = 25;let isActive: boolean = true;
// Interfaceinterface User { id: number; name: string; email: string; avatar?: string; // optional}
// Function Typesfunction processUser(user: User): void { console.log(user.name);}Architect’s Note (บันทึกสถาปนิก)
Section titled “Architect’s Note (บันทึกสถาปนิก)”⚠️ ข้อควรระวัง
Section titled “⚠️ ข้อควรระวัง”- ใช้ TypeScript ในโปรเจกต์จริง — Bug ลดลงมากกว่า 40%
- หลีกเลี่ยง
any— ถ้าใช้ any ไปทำไมต้อง TypeScript - อย่าใช้
var— ใช้constและletแทน
💡 Best Practices
Section titled “💡 Best Practices”- Enable Strict Mode ใน TypeScript
- ใช้ ESLint + Prettier สำหรับ Code Style
- เขียน Type Definitions สำหรับ API Responses