ข้ามไปเนื้อหาหลัก

type-safe process.env ด้วย declaration merging

process.env ทุกตัวเป็น string | undefined โดยค่าเริ่มต้น — merge declaration ทำให้ autocomplete และ type safe ได้ง่ายๆ

ปัญหา: TypeScript บอกว่า process.env.MY_VAR มี type เป็น string | undefined ทุกตัว ทำให้ต้องเช็คซ้ำทุกที่

แก้ด้วย declaration merging ใน src/env.d.ts:

declare namespace NodeJS {
  interface ProcessEnv {
    NODE_ENV: 'development' | 'production' | 'test';
    DATABASE_URL: string;
    API_KEY: string;
    PORT?: string; // optional
  }
}

หลังจากนี้ process.env.NODE_ENV จะ type เป็น 'development' | 'production' | 'test' ทันที พร้อม autocomplete

ข้อจำกัด: วิธีนี้ไม่ได้ validate ค่าจริงตอน runtime — ถ้าต้องการ validate และ throw error เมื่อ env var หาย ควรใช้ Zod หรือ t3-env แทน เหมาะสำหรับ project ขนาดใหญ่ที่ strict มากกว่า