50 สิ่งที่ต้องรู้เกี่ยวกับ TypeScript JavaScript ที่เพิ่ม Static Type Checking ขึ้นมา ช่วยจับ bug

50 สิ่งที่ต้องรู้เกี่ยวกับ TypeScript

TypeScript คือ JavaScript ที่เพิ่ม Static Type Checking ขึ้นมา ช่วยจับ bug ตั้งแต่ตอน compile ไม่ต้องรอถึง runtime

พื้นฐาน

1. ถูกสร้างโดย Microsoft ปี 2012

Anders Hejlsberg (ผู้สร้าง C# และ Delphi) เป็นผู้ออกแบบ TypeScript

2. TypeScript คือ Superset ของ JavaScript

JavaScript ที่ถูกต้องทุกตัว คือ TypeScript ที่ถูกต้อง — รันไฟล์ .js ได้เลย

3. Compile เป็น JavaScript

TypeScript ไม่รันตรงๆ — tsc แปลงเป็น .js ก่อน run

tsc app.ts # สร้าง app.js

4. Type Erasure

ตอน compile จะถอด type ทิ้ง — runtime คือ JavaScript ปกติ

5. เหตุผลที่นิยม

* จับ bug ตั้งแต่เขียน

* IDE autocomplete ดีขึ้น

* Refactor ง่ายขึ้น

* ทีมใหญ่ทำงานร่วมกันได้ดีขึ้น

Basic Types

6. Type Annotations

let name: string = “John”;

let age: number = 30;

let isActive: boolean = true;

let items: string[] = [“a”, “b”];

let tuple: [string, number] = [“age”, 30];

7. Type Inference

TypeScript เดา type ได้เอง — ไม่ต้องเขียนขึ้นหมด

let name = “John”; // type: string (เดาอัตโนมัติ)

8. Union Types

let id: string | number;

id = “abc”; // OK

id = 123; // OK

id = true; // Error!

9. Literal Types

let direction: “north” | “south” | “east” | “west”;

direction = “north”; // OK

direction = “up”; // Error!

10. any, unknown, never, void

* any: ปิด type checking (หลีกเลี่ยง!)

* unknown: ต้องเช็ค type ก่อนใช้

* never: function ไม่มีวัน return

* void: function ไม่ return ค่า

Interfaces & Types

11. Interface

interface User {

id: number;

name: string;

email?: string;

readonly createdAt: Date;

}

const user: User = {

id: 1,

name: “John”,

createdAt: new Date()

};

12. Type Aliases

type Point = { x: number; y: number };

type ID = string | number;

type Callback = (data: string) => void;

13. Interface vs Type

Interface: ขยาย ได้ (declaration merging), เหมาะ OOP

Type: flexible กว่า, ทำ union/intersection ได้

14. Extending Interfaces

interface Animal { name: string; }

interface Dog extends Animal {

bark(): void;

}

15. Intersection Types

type Employee = User & { salary: number };

Functions

16. Function Types

function add(a: number, b: number): number {

return a + b;

}

const multiply: (a: number, b: number) => number =

(a, b) => a * b;

17. Optional & Default Parameters

function greet(

name: string,

greeting: string = “Hello”

): string {

return ${greeting}, ${name};

}

function log(message: string, level?: string) {

}

18. Rest Parameters

function sum(…nums: number[]): number {

return nums.reduce((a, b) => a + b, 0);

}

19. Function Overloading

function format(value: string): string;

function format(value: number): string;

function format(value: string | number): string {

return typeof value === ‘string’

? value.toUpperCase()

: value.toFixed(2);

}

20. Arrow Functions

const greet = (name: string): string =>

Hello, ${name};

Generics

21. Generic Functions

function identity(arg: T): T {

return arg;

}

const num = identity(42);

const str = identity(“hello”);

22. Generic Constraints

function longest<T extends { length: number }>(

a: T,

b: T

): T {

return a.length > b.length ? a : b;

}

23. Generic Interfaces

interface ApiResponse {

data: T;

status: number;

message: string;

}

const userResponse: ApiResponse =

await fetchUser();

24. Generic Classes

class Stack {

private items: T[] = [];

push(item: T) {

this.items.push(item);

}

pop(): T | undefined {

return this.items.pop();

}

}

const numStack = new Stack();

25. Default Generic Type

interface Config<T = string> {

value: T;

}

Advanced Types

26. Utility Types: Partial

interface User {

id: number;

name: string;

email: string;

}

type UserUpdate = Partial;

27. Pick<T, K> และ Omit<T, K>

type UserPreview = Pick<User, ‘id’ | ‘name’>;

type UserWithoutId = Omit<User, ‘id’>;

28. Required และ Readonly

type RequiredUser = Required;

type ReadonlyUser = Readonly;

29. Record<K, T>

type Roles = ‘admin’ | ‘user’ | ‘guest’;

type Permissions = Record<Roles, string[]>;

30. Mapped Types

type Optional = {

[K in keyof T]?: T[K];

};

Type Guards

31. typeof Guards

function format(value: string | number) {

if (typeof value === ‘string’) {

return value.toUpperCase();

}

return value.toFixed(2);

}

32. instanceof Guards

if (error instanceof TypeError) {

console.log(error.message);

}

33. in Operator

if (‘email’ in user) {

console.log(user.email);

}

34. Type Predicates

function isString(value: unknown): value is string {

return typeof value === ‘string’;

}

if (isString(data)) {

console.log(data.toUpperCase());

}

35. Discriminated Unions

type Shape =

| { kind: ‘circle’; radius: number }

| { kind: ‘square’; side: number };

function area(shape: Shape) {

switch (shape.kind) {

case ‘circle’:

return Math.PI * shape.radius ** 2;

case 'square':

return shape.side ** 2;

}

}

Classes

36. Classes พร้อม Access Modifiers

class User {

public name: string;

private password: string;

protected role: string;

constructor(name: string, password: string) {

this.name = name;

this.password = password;

this.role = ‘user’;

}

}

37. Shorthand Constructor

class User {

constructor(

public name: string,

private password: string,

public readonly id: number

) {}

}

38. Abstract Classes

abstract class Animal {

abstract makeSound(): void;

move() {

console.log(“moving…”);

}

}

class Dog extends Animal {

makeSound() {

console.log(“woof!”);

}

}

39. Implements Interface

interface Comparable {

compareTo(other: T): number;

}

class Score implements Comparable {

constructor(public value: number) {}

compareTo(other: Score) {

return this.value - other.value;

}

}

Configuration

40. tsconfig.json

{

“compilerOptions”: {

“target”: “ES2022”,

“module”: “ESNext”,

“strict”: true,

“esModuleInterop”: true,

“skipLibCheck”: true,

“outDir”: “./dist”

}

}

41. strict Mode

เปิด "strict": true ใน tsconfig — เปิดทุกการตรวจสอบเข้มงวด แนะนำสำหรับโปรเจกต์ใหม่!

42. strictNullChecks

let name: string = null; // Error

let name: string | null = null; // OK

Modules

43. import/export

// utils.ts

export const add =

(a: number, b: number) => a + b;

export default class Calculator { }

// main.ts

import Calculator, { add } from ‘./utils’;

import type { User } from ‘./types’;

Best Practices

44. หลีกเลี่ยง any

// ผิด

function process(data: any) { }

// ถูก

function process(data: T) { }

45. Use as const

const colors = [‘red’, ‘green’, ‘blue’] as const;

46. Template Literal Types

type Greeting = Hello, ${string};

type Direction =

${'top' | 'bottom'}-${'left' | 'right'};

47. Enums (ระวัง!)

const Status = {

Active: ‘active’,

Inactive: ‘inactive’

} as const;

type Status =

typeof Status[keyof typeof Status];

เครื่องมือและ Ecosystem

48. ใช้กับ Frameworks

* React: type props ด้วย interface

* Next.js: support TypeScript out-of-box

* NestJS: backend framework สำหรับ TypeScript โดยเฉพาะ

* Vue 3: รองรับ TS เต็มที่

49. tsx vs ts

* .ts — TypeScript ปกติ

* .tsx — TypeScript + JSX (React)

50. @types Packages

npm install –save-dev @types/node @types/react

Library หลาย ๆ ตัวที่เขียนด้วย JavaScript จะมี type definitions ใน @types/*

สรุป: TypeScript กลายเป็นมาตรฐานของโปรเจกต์ใหญ่ๆ ในปัจจุบัน — Microsoft, Google, Airbnb ใช้กันหมด เริ่มจาก strict mode และค่อยๆ เรียนรู้ utility types เพื่อใช้ประโยชน์เต็มที่

6/29 แก้ไขเป็น

... อ่านเพิ่มเติมในฐานะนักพัฒนา JavaScript ที่เปลี่ยนไปใช้ TypeScript พบว่า Static Type Checking เป็นประโยชน์มากในการลดปัญหาบักที่ต้องเจอใน runtime โดยเฉพาะตอนทำงานโปรเจกต์ขนาดใหญ่ที่มีทีมหลายคน TypeScript ช่วยจับ error ตอนเขียนโค้ด ช่วยให้เราเขียนโค้ดแน่นหนาและมั่นใจมากขึ้น นอกจากนี้ฟีเจอร์อย่าง type inference ที่ TypeScript คาดเดาประเภทข้อมูลให้เอง ก็ช่วยลดการเขียนโค้ดที่ซ้ำซ้อนและทำให้โค้ดอ่านง่ายขึ้นอย่างเห็นได้ชัด เผลอๆ ฟีเจอร์ Interfaces กับ Type Aliases ก็ให้ประโยชน์สูงในการจัดการโครงสร้างข้อมูลและสร้าง contract ที่ชัดเจนสำหรับทีมทำงานร่วมกันได้ดี กรณีใช้กับ framework อย่าง React หรือ Next.js ก็นิยมใช้ interface สำหรับการกำหนด props เพื่อให้ได้ฟีเจอร์ autocomplete และป้องกันบักก่อนเริ่ม run กด นอกจากนี้ การใช้ tsconfig.json เปิด strict mode ตั้งแต่ต้นโปรเจกต์ เป็นสิ่งสำคัญมาก เพราะจะบีบให้เราระบุให้ชัดเจนว่า type ใดรับค่า null ได้หรือไม่ ทำให้โค้ดมีคุณภาพและลดข้อผิดพลาดช่วง runtime ลงได้อย่างมาก จากประสบการณ์ส่วนตัว การเรียนรู้และใช้ Utility Types อย่าง Partial, Pick, Omit และการใช้งาน Generics ก็เป็นสิ่งที่ทำให้โค้ด TypeScript มีความยืดหยุ่นและครอบคลุมหลากหลายสถานการณ์มากขึ้น ทั้งนี้ต้องระวังไม่ใช้ any หรือ enum เกินความจำเป็น เพราะอาจทำให้เสียประโยชน์จากระบบ type checking ของ TypeScript ได้ สุดท้าย ecosystem ของ TypeScript ยังเติบโตอย่างรวดเร็ว มี type definitions พร้อมใช้งานใน @types/* สำหรับไลบรารี JavaScript ยอดนิยม แถม framework หลายตัวก็รองรับ TypeScript อย่างเต็มรูปแบบ ทำให้การพัฒนาร่วมกันในทีมใหญ่ๆ เป็นไปได้อย่างราบรื่นและมีประสิทธิภาพสูงสุด

โพสต์ที่เกี่ยวข้อง

50 สิ่งที่ต้องรู้เกี่ยวกับ 💛 JavaScript 💛ภาษาโปรแกรมที่ได้รับความนิยมสูงสุดในโลก
50 สิ่งที่ต้องรู้เกี่ยวกับ JavaScript JavaScript เป็นภาษาโปรแกรมที่ได้รับความนิยมสูงสุดในโลก ใช้งานทั้งฝั่ง Frontend, Backend, Mobile และ Desktop Part 1 พื้นฐานและประวัติ 1. JavaScript ถูกสร้างใน 10 วัน Brendan Eich สร้าง JavaScript ขึ้นมาในปี 1995 ภายในเวลาเพียง 10 วัน ที่บริษัท Netscape
NerdDailyDose

NerdDailyDose

ถูกใจ 14 ครั้ง

50 สิ่งเกี่ยวกับ AI Automation ที่คุณควรรู้ในปี 2026
วันนี้คุณทำอะไรซ้ำกับเมื่อวานบ้างไหม? เปิด Email / ตอบข้อความ / Copy ข้อมูล / กรอก Spreadsheet / ส่ง Report / นัดประชุมแล้วสรุปประชุม แล้วก็ทำแบบนี้วนไปทุกวัน ถ้ารวมเวลาที่เสียไปกับงานซ้ำๆ เหล่านี้ในหนึ่งปี มันอาจเป็น “เดือนๆ ของชีวิต” ที่หายไป และนี่คือเหตุผลที่ AI Automation กำลังเปลี่ยนวิ
NerdDailyDose

NerdDailyDose

ถูกใจ 111 ครั้ง

ภาพปกหนังสือ '50 สิ่งเกี่ยวกับ n8n ที่คนทำ Automation ควรรู้' พร้อมคำโปรยว่าคู่มือสรุปเข้าใจง่าย ใช้งานจริงได้ทันทีสำหรับทุกคน แสดงถึงการเชื่อมต่อแอปและ API เพื่อสร้าง Workflow อัตโนมัติ ช่วยให้ทำงานได้เหนือกว่า
50 สิ่งเกี่ยวกับ n8n ที่ควรรู้ สำหรับคนอยากสร้าง workflow เอง
ถ้าพูดถึง automation หลายคนอาจนึกถึงเครื่องมือที่ช่วยเชื่อมแอปแบบง่ายๆ เช่น มีฟอร์มเข้ามา แล้วให้ส่งข้อมูลไปที่ตาราง มีอีเมลใหม่ แล้วให้แจ้งเตือนในแชต หรือมีลูกค้าใหม่ แล้วให้สร้าง task ต่ออัตโนมัติ แต่พอเราเริ่มทำ automation จริงจังขึ้น คำถามจะเริ่มเปลี่ยนไป จากเดิมที่ถามว่า “ทำให้ระบบท
NerdDailyDose

NerdDailyDose

ถูกใจ 11 ครั้ง

ภาพหน้าปกบทความเกี่ยวกับ n8n แพลตฟอร์ม Automation ที่มาแรงที่สุดในปีนี้ แสดงโลโก้ n8n สีชมพูบนพื้นหลังห้องนอน
ภาพอธิบายเหตุผลที่คนนิยมใช้ n8n เช่น ฟรี ใช้งานง่ายแบบ Drag and Drop เชื่อมต่อได้กว่า 350 แอป และสามารถเขียนโค้ดเพิ่มได้
ภาพอธิบายว่า n8n คืออะไร เป็นเครื่องมือ Automation ออนไลน์ที่ช่วยให้การสร้างระบบง่ายขึ้น แม้คนไม่เขียนโค้ดก็ใช้ได้
ตอบทุกข้อสงสัยเกี่ยงกับ n8n
Online Automation ที่มาแรงที่สุดแห่งปี! ใครอยากลองทำ workflow ไม่ควรพลาด เพราะมีเครดิตให้ฟรีแบบจุกๆ #ai #n8n #workflow #automation #developer
Olyvia Ma

Olyvia Ma

ถูกใจ 173 ครั้ง

ภาพอินโฟกราฟิกแสดง 50 ภาษา Coding ยอดนิยมในปี 2026 พร้อมการใช้งาน แบ่งเป็น 7 หมวดหมู่หลัก ได้แก่ Web Development, AI & Data Science, Mobile Development, Enterprise & Backend, System Programming, Game Development และ Cloud & DevOps โดยมีข้อคิดว่าภาษาที่ดีที่สุดคือภาษาที่ช่วยสร้างสิ่งที่ต้องการ
50 ภาษา Coding ที่ยังเป็นที่นิยมในปี 2026แต่ละตัวใช้ทำอะไรกันบ้าง มาดูกัน
หากย้อนกลับไปเมื่อหลายสิบปีก่อน การเขียนโปรแกรมอาจเป็นทักษะเฉพาะทาง สำหรับนักพัฒนาซอฟต์แวร์เพียงไม่กี่กลุ่ม แต่ในปัจจุบัน โค้ดได้กลายเป็นภาษาสากลอีกภาษาหนึ่งของโลก 🌍 เว็บไซต์ที่เราเปิดทุกวัน แอปที่เราใช้งาน AI ที่เราคุยด้วย เกมที่เราเล่น และระบบธุรกิจที่อยู่เบื้องหลังอ
NerdDailyDose

NerdDailyDose

ถูกใจ 155 ครั้ง

JavaScript Cheat Sheet🌟ภาษายอดนิยมสำหรับเว็บฝั่ง Frontend และ Backend
JavaScript ภาษายอดนิยมสำหรับเว็บฝั่ง Frontend และ Backend ทำเว็บไซต์แบบไดนามิก เกมบนเบราว์เซอร์ และมือถือ 5 สิ่งต้องรู้เกี่ยวกับ JavaScript 1. JavaScript คืออะไร? — ภาษาโปรแกรมลำดับสูง รันได้ทั้ง Browser (Frontend) และ Server (Node.js) 2. ติดตั้ง/รันที่ไหน? — รันบน Browser console (F12) หรือติ
NerdDailyDose

NerdDailyDose

ถูกใจ 122 ครั้ง

เผลอไม่ได้😱แค่กดเข้าเว็บ โดนล้วงข้อมูลส่วนตัว แก้ไขยังไงไปดู 👀
ใช้ Android ต้องดู! 🛡️ ตั้งค่าด่วนก่อนโดนแอบดูดข้อมูลส่วนตัว วิธีง่ายๆ ที่หลายคนมองข้าม ทำตามพี่กุ๋ยได้เลยครับ! ✨ #ความปลอดภัย #Android #ITน่ารู้ #พี่กุ๋ยไอทีสเตชั่น #สอนใช้มือถือ
พี่กุ๋ยไอทีสเตชั่น

พี่กุ๋ยไอทีสเตชั่น

ถูกใจ 57 ครั้ง

ภาพแสดงการออกแบบฐานข้อมูลสำหรับเว็บแอปฯ บันทึกเพื่อนยืมเงิน โดยมีตารางหลักเช่น TblUser, TblLendingRecord และ TblFollow พร้อมข้อความระบุว่าเป็น EP.2 ของการสร้างเว็บแอปฯ
ภาพแสดงการออกแบบฐานข้อมูล โดยเน้นคำอธิบายว่าฐานข้อมูลคือพื้นที่เก็บข้อมูล และระบบนี้เลือกใช้ Relational database พร้อมคำถามชวนให้คอมเมนต์หากต้องการทราบเกี่ยวกับ Relational database
ภาพแสดงแผนภาพฐานข้อมูลที่ประกอบด้วยตาราง TblLendingRecord, TblPaymentRecord, TblUser, TblCategory และ TblFollow พร้อมรายการตารางที่จำเป็นตาม Requirement เช่น บัญชีผู้ใช้, หมวดหมู่, รายการยืมเงิน, การคืนเงิน และการติดตามบัญชีอื่น
EP. 2 | ออกแบบ Database เว็บบันทึกเพื่อนยืมเงิน
✨ หลังจากที่เขียน Requirement ที่ต้องการทั้งหมดแล้วขั้นตอนต่อมาคือออกแบบ "ฐานข้อมูล" ในระบบนี้เลือกใช้เป็น Relational database (PostgreSQL) เพราะว่าต้องการที่จะใช้ฟังก์ชันในการ Join ตารางจะได้ query data ได้ง่ายๆ ✅ หลักการการออกแบบฐานข้อมูลให้ดูจาก requirement เป็นหลักว่าเราต้องการใช้
txwan

txwan

ถูกใจ 499 ครั้ง

50 สิ่งเกี่ยวกับ webflow ✨No-Code Website Builder
ช่วงหลายปีที่ผ่านมา การสร้างเว็บไซต์เคยเป็นเรื่องของ “Developer” เป็นหลัก ถ้าอยากได้เว็บสวยๆ ต้องเขียน code ต้องเข้าใจ HTML, CSS, JavaScript ต้องวาง server ต้อง debug ต้องแก้ responsive ต้องคุยระหว่าง designer กับ programmer ไปมาไม่รู้กี่รอบ และนี่คือเหตุผลที่เว็บจำนวนมาก กว่าจะขึ้นจร
NerdDailyDose

NerdDailyDose

ถูกใจ 16 ครั้ง

ดูเพิ่มเติม