I'm not sure if any of you ever came across the same issue but I've got a problem with ts-node and environment variables and your help would be much appreciated!
What I'm trying to do here is basically just to run index.ts with ts-node. And this index.ts simply prints out one of the environment variables.
index.ts:
import "dotenv/config";
const printEnv = (value: string) => {
console.log(value);
};
printEnv(process.env.PASSWORD);
To make the environment variables available from index.ts, I created env.d.ts in which I defined the type of the variable.
env.d.ts:
declare global {
namespace NodeJS {
interface ProcessEnv {
PASSWORD: string;
}
}
}
export {}
I set up my tsconfig.json, package.json and .env files like below.
tsconfig.json:
{
"name": "ts-env",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"scripts": {
"start": "nodemon src/index.ts"
},
"devDependencies": {
"@types/node": "^18.6.1",
"nodemon": "^2.0.19",
"ts-node": "^10.9.1",
"typescript": "^4.7.4"
},
"dependencies": {
"dotenv": "^16.0.1"
}
}
package.json:
{
"name": "ts-env",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"scripts": {
"start": "nodemon src/index.ts"
},
"devDependencies": {
"@types/node": "^18.6.1",
"nodemon": "^2.0.19",
"ts-node": "^10.9.1",
"typescript": "^4.7.4"
},
"dependencies": {
"dotenv": "^16.0.1"
}
}
.env:
PASSWORD=test0123
With this setup, Visual Studio Code is now able to show me the possible options whenever I type process.env.
But it fails to compile whenever I try to run this application with ts-node, saying that process.env.PASSWORD could be undefined.
Here is the error log from ts-node:
TSError: ⨯ Unable to compile TypeScript:
src/index.ts:9:10 - error TS2345: Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
Type 'undefined' is not assignable to type 'string'.
9 printEnv(process.env.PASSWORD);
I did fair amount of digging but unable to find a right solution for this issue. It would be much appreciated if you could point me in the right direction.
