node.js - TypeScript-deklarasjoner for miljøvariabler blir ikke gjenkjent
Jeg prøver å koble til MongoDB når jeg starter min node.js-server. Serveren min er i src/server.ts, connectDB() er i src/config/db.ts og min .env og environment.d.ts er i rotkatalogen. Men når jeg prøver å koble til databasen, sier den fortsatt at min MONGO_URI, deklarert i .env, er av typen string | undefined.
environment.d.ts:
declare namespace NodeJS {
export interface ProcessEnv {
PORT?: string;
NODE_ENV: 'development' | 'production';
MONGO_URI: string;
}
}
src/server:
import dotenv from 'dotenv';
import express from 'express';
import connectDB from './config/db';
dotenv.config({ path: '../.env' });
connectDB();
const app = express();
.....
src/config/db.ts:
import mongoose from 'mongoose';
const connectDB = async () => {
try {
const conn = await mongoose.connect(process.env.MONGO_URI, {
useUnifiedTopology: true,
useNewUrlParser: true,
useCreateIndex: true,
});
console.log(`MongoDB connected: ${conn.connection.host}`);
} catch (error) {
console.error(`ERROR: ${error.message}`);
process.exit(1);
}
};
export default connectDB;
Full feilkode:
TSError: ⨯ Unable to compile TypeScript:
src/config/db.ts:5:41 - error TS2769: No overload matches this call.
Overload 1 of 3, '(uri: string, callback: (err: CallbackError) => void): void', gave the following error.
Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
Type 'undefined' is not assignable to type 'string'.
Overload 2 of 3, '(uri: string, options?: ConnectOptions | undefined): Promise<typeof import("mongoose")>', gave the following error.
Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
Type 'undefined' is not assignable to type 'string'.
5 const conn = await mongoose.connect(process.env.MONGO_URI, {
Jeg prøvde å erklære dotenv.config() i db.ts og fjerne path-alternativet når jeg erklærte det i server.ts. Når jeg holder musen over miljøvariabelen i VSCode, vises (property) NodeJS.ProcessEnv.MONGO_URI: string. Så jeg trodde virkelig at dette var satt opp riktig, men jeg må ha gått glipp av noe.
Svar #1
Prøv å legge det inn i global.d.ts-filen slik:
declare global {
namespace NodeJS {
interface ProcessEnv {
PORT?: string;
NODE_ENV: 'development' | 'production';
MONGO_URI: string;
}
}
}
export {};
Svar #2
Denne feilen kan skyldes reglene i tsconfig.json-filen din. Mest sannsynlig på grunn av "strictNullChecks": true har du satt denne regelen til true. Det finnes to enkle løsninger:
- sett denne regelen til false slik:
"strictNullChecks": false. - Eller legg til
!umiddelbart etterprocess.env.MONGO_URIslik:process.env.MONGO_URI!. Symbolet!sikrer for typescript-transpilereren din at verdien ikke vil være undefined.
