Typing Environment Variables and Configuration Safety - Textnotes

Typing Environment Variables and Configuration Safety


Learn how to manage environment variables safely in TypeScript applications. This module explains typing environment variables, ensuring configuration safety, and preventing runtime errors from missing or incorrect values

1. Typing Environment Variables

TypeScript allows defining types for environment variables to ensure correct usage across the application.

Example Using process.env


interface EnvConfig {
PORT: number;
DB_HOST: string;
DB_USER: string;
}

function getEnv(): EnvConfig {
if (!process.env.PORT || !process.env.DB_HOST || !process.env.DB_USER) {
throw new Error("Missing environment variables");
}
return {
PORT: Number(process.env.PORT),
DB_HOST: process.env.DB_HOST,
DB_USER: process.env.DB_USER,
};
}

const config = getEnv();
console.log(config.PORT, config.DB_HOST, config.DB_USER);

Typing ensures correct property access and reduces runtime errors due to undefined or wrongly typed variables.

Using dotenv for Environment Files


npm install dotenv

import dotenv from "dotenv";
dotenv.config();

const config = getEnv();

Using .env files with type-safe access makes environment management predictable and secure.

2. Configuration Safety

Safe configuration ensures that applications fail fast when environment variables are missing or invalid.

Best Practices

  1. Validate all required environment variables at startup
  2. Use TypeScript interfaces for typed access
  3. Use default values where appropriate
  4. Avoid hardcoding sensitive values in code

Example with Defaults


const PORT = process.env.PORT ? Number(process.env.PORT) : 3000;

Configuration safety improves application reliability and prevents unexpected runtime errors in different environments.

Conclusion

Typing environment variables and enforcing configuration safety in TypeScript ensures reliable and secure applications. Validating environment values, using TypeScript interfaces, and following best practices reduce errors and simplify application deployment.