@komigor

Почему typescript не видит пременные окружения?

Я подключил .env файл в основной файл app.ts вот так
import * as dotenv from 'dotenv';
dotenv.config();
но в другом файле хочу подключить bd и использовать переменные окружения
export const db = new Sequelize(
          process.env.DB_NAME,
          process.env.DB_USER ,
          process.env.DB_PASSWORD,
          {
              host: 'localhost',      
              dialect: 'postgres', 
              models: [__dirname + 'models']
          }
);

но оно их не видит и выдает

/home/ihor/Test Task by Komah Ihor/node_modules/ts-node/src/index.ts:587
    return new TSError(diagnosticText, diagnosticCodes);
           ^
TSError: ⨯ Unable to compile TypeScript:
src/db.ts:4:11 - error TS2345: Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
  Type 'undefined' is not assignable to type 'string'.

4           process.env.DB_NAME,
            ~~~~~~~~~~~~~~~~~~~

    at createTSError (/home/ihor/Test Task by Komah Ihor/node_modules/ts-node/src/index.ts:587:12)
    at reportTSError (/home/ihor/Test Task by Komah Ihor/node_modules/ts-node/src/index.ts:591:19)
    at getOutput (/home/ihor/Test Task by Komah Ihor/node_modules/ts-node/src/index.ts:921:36)
    at Object.compile (/home/ihor/Test Task by Komah Ihor/node_modules/ts-node/src/index.ts:1189:32)
    at Module.m._compile (/home/ihor/Test Task by Komah Ihor/node_modules/ts-node/src/index.ts:1295:42)
    at Module._extensions..js (internal/modules/cjs/loader.js:1097:10)
    at Object.require.extensions.<computed> [as .ts] (/home/ihor/Test Task by Komah Ihor/node_modules/ts-node/src/index.ts:1298:12)
    at Module.load (internal/modules/cjs/loader.js:933:32)
    at Function.Module._load (internal/modules/cjs/loader.js:774:14)
    at Module.require (internal/modules/cjs/loader.js:957:19)
[nodemon] app crashed - waiting for file changes before starting...

почему тако происходит?
  • Вопрос задан
  • 523 просмотра
Пригласить эксперта
Ответы на вопрос 2
@askhat
Читаем внимательно

Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
  Type 'undefined' is not assignable to type 'string'.

Разгадка

process.env.DB_NAME может быть типа string или undefined, так как не факт, что переменные определены, а то место, куда DB_NAME вставляется ожидает строго строку.

Решение

Нужно проверять значение process.env.DB_NAME до того как оно будет передано конструктору:
export const DB_NAME = process.env.DB_NAME ?? "default_database";

Ответ написан
@komigor Автор вопроса
надо было просто вот так написать import { Sequelize } from 'sequelize-typescript';
export const db = new Sequelize(
          `${process.env.DB_NAME}`,
          `${process.env.DB_USER}` ,
          `${process.env.DB_PASSWORD}`,
          {
              host: 'localhost',      
              dialect: 'postgres', 
              models: [__dirname + 'models']
          }
);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы