型 'undefined' は型 'string | string[]' に代入できません 質問する

型 'undefined' は型 'string | string[]' に代入できません 質問する

メインファイル上のファイルconfigを試しています。.env

しかし、どういうわけか動作しませんが、エラーは間違っています。表示されていますundefinedが、すでに存在しています

1回目の試み

require('dotenv').config({ path: `${__dirname}/../.env` })

2回目の試み

import * as dotenv from 'dotenv'
dotenv.config()

3回目のトライ

import 'dotenv/config'

何らかの理由で.env読み込まれません。

ファイルを実行する

ts-node main.ts

.env ファイル

SESSION_SECRET = uq07nyvn4xadskdg
COOKIE_SECRET = 0k5kb4qi8shhi7u0n

DB_HOST = 127.0.0.1
DB_PORT = 3306
DB_USER = root
DB_PASS = root
DB_NAME = db_name

データベース接続

export const db = createPool({
  host: process.env.DB_HOST,
  port: process.env.DB_PORT,
  user: process.env.DB_USER,
  password: process.env.DB_PASS,
  database: process.env.DB_NAME,
})

セッション

const sessionD = session({
  secret: process.env.SESSION_SECRET,
  resave: true,
  saveUninitialized: true,
  store: new MySQLStore({
    host: process.env.DB_HOST,
    port: process.env.DB_PORT,
    user: process.env.DB_USER,
    password: process.env.DB_PASS,
    database: process.env.DB_NAME,
  }),
})

ベストアンサー1

dotenvタイプスクリプトは伝えない何でも.env実行時に、あなたの中のものをすべて入れるだけですprocess.env。これによって、何の型も変更されません。

process.envつまり、次のようなタイプを扱っているようです:

export interface ProcessEnv {
    [key: string]: string | undefined;
}

つまり、割り当てられない値に割り当てることはできませんundefined

const myVar: string = process.env.WHATEVER
// Type 'string | undefined' is not assignable to type 'string'.
//   Type 'undefined' is not assignable to type 'string'.

修正方法は、未定義のケースを処理することです。誰かがファイルを忘れたり.env、そのエントリの一部を削除したりした場合はどうなるでしょうか? その場合、コードでは何をすべきでしょうか?

おそらく、デフォルトを提供します:

const whatever: string = process.env.WHATEVER ?? 'whatever default'

あるいはエラーをスローするかもしれません:

let whatever: string
if (process.env.WHATEVER) {
  whatever = process.env.WHATEVER
} else {
  throw new Error("WHATEVER environment variable is not set")
}

TL;DR:undefinedケースを処理します。

おすすめ記事