Error Log - TypeORM을 DotEnv로 연결하여 설정시 TypeScript에서의 Type Error

에러 상황

TypeScript로 typeORM을 세팅할때,
dotEnv로 설정값을 주고 연결을 해보면 다음과 같은 오류를 볼 수 있다.
 

https://i.imgur.com/hyQSLSS.png  
 

위 3개의 해당 error message를 살펴보면 차례로 다음과 같다.

1
2
3
4
5
TS2322: Type 'string' is not assignable to type '"mysql" | "mariadb" | "postgres" | "cockroachdb" | "sqlite" | "mssql" | "sap" | "oracle" | "cordova" | "nativescript" | "react-native" | "sqljs" | "mongodb" | "aurora-mysql" | ... 4 more ... | "spanner"'.

TS2322: Type 'string' is not assignable to type 'number'.

TS2322: Type 'string' is not assignable to type 'LoggerOptions'.

 

이는 typeORM의 설정 type이 정해져있어서 그렇다.
 

첫번째, type의 경우 mysql' | 'mariadb' | 'postgres'... 의 경우로 type이 정해져있음을 볼 수 있다.

즉 이를 지정해주면 되는데, 조금 난해하다.
 
 

해결

global.d.ts라는 이름의 파일을 만들고 1
다음과 같이 세팅을 한다.
 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
declare global {  
  namespace NodeJS {  
    interface ProcessEnv {  
      TYPEORM_CONNECTION: 'mysql' | 'mariadb';  
      TYPEORM_PORT: number;  
      SECRET_KEY: string;  
      TYPEORM_LOGGING: boolean;  
    }  
  }
}

export {}   // <- 이거 꼭 넣어줘야 한다.

 

global로 선언하고, NodeJS에서의 dotenv 명은 ProcessEnv인가보다.
문제는 이렇게 해도 타입에러가 해결되지 않는다.
 

이는 밖으로 내보내기가 되지 않아서 생긴 문제로,
아무 의미 없는것 같지만 export {} 를 가장 아랫단에 꼭 넣어줘야 한다.
 

Note
다른 파일에서 타입 정의시,
declare - namespace 후,
export {} 넣기!!

 

그러면 정상적으로 에러가 해결됨을 볼 수 있다.
 

중괄호 안에 아무것도 없지만 정확하게 어떻게 작동하는지는 조금 더 공부를 해봐야겠다.


  1. 파일명은 상관없다. ↩︎


Related Content

0%