has no initializer and is not definitely assigned in the constructor

긴가민가·2023년 1월 28일
2

문제 사항 해결기

목록 보기
2/7

문제 사항

TypeORM 초기 설정 중 위 이미지와 같이 에러가 발생합니다.

원인

Typescript에서 발생한 문제로, 타입 선언 후 초기값을 설정하지 않아서 생긴 문제였어요..ㅎ

해결 방안

1. Typescript 설정 변경하기

tsconfig.jsonstrictPropertyInitialization의 설정을 false로 변경해주면 에러가 사라집니다.🙂

  • strictPropertyInitialization : class property가 constructor에서 값이 할당되었는지 확인하는 기능 활성화 여부
  "compilerOptions": {
    ...,
    "strictPropertyInitialization": false,
    ...,
  },

💡 해당 방법은 개인적으로 좋은 방법이 아니라고 생각해요.
비활성화를 하게 되면 잠재적으로 문제(개발 시 실수..?)를 이를킬 소지가 더 커지기 때문입니다.
하지만 해당 옵션을 활성화해서 단점보다 장점이 더 크다면 활성화하는게 맞겠죠? :)

_

2. Definite Assignment Assertions(확정 할당 어선셜)

컴파일러에게 "선언은 안했지만 무조건 값이 있다고 생각해~"라고 알려주는 방법입니다.

3. Optional Properties (선택적 속성)

컴파일러에게 "필수가 아닌 속성이야~"라고 알려주는 방법입니다.

4. 초기값 선언하기

초기값을 선언해 에러를 발생시키지 않도록 합니다.

💡 필자의 4번과 같이 최대한 초기값을 선언하려고 합니다. :)

🚨 참고사항
stackoverflow 해당 이슈에 대한 토론에서 참고했어요. :)

TypeORM에서는 어떻게?

필수인 속성에는 !를 사용해 타입을 단언해주었습니다. (MySQL 기준으로, primary key, 또는 컬럼 중 default 값이 설정되어있는 컬럼)
선택인 속성에는 값을 할당해 에러가 나지 않도록 처리했습니다.😀

🚨 참고사항
TypeORM-entity Github issue에서 참고했습니다. :)


의견은 언제든 댓글로 남겨주세요. 🙂

profile
미래의 내가 참고하려고 모아가는 중 :)

0개의 댓글