TypeScript의 Constructor 내부에서 할당하는 method를 호출하면 TypeScript가 인식을 하지 못합니다.
조회수 440회
class Block{
// Implements about block. internal.
blockProperties: Object;
constructor(){
this.applyBlockPrototype();
}
applyBlockPrototype(): void{
this.blockProperties = new Object();
}
}
이런 코드가 있을 시에, blockProperties 가 초기화 되어있지 않다고 컴파일도 안되고, IDE 에서도 빨간줄로 쭉 나옵니다.
하지만 똑같은 논리인데, 이렇게 하면 오류가 없습니다.
class Block{
// Implements about block. internal.
blockProperties: Object;
constructor(){
this.blockProperties = new Object();
}
}
도대체 제가 무엇을 잘못 했을까요?
1 답변
-
TypeScript Playground(v3.9.2) 에서 테스트 해본 결과 네 가지 해결 방법.
아래 옵션들 중 하나를 Off
- --strictNullChecks (^ 2.0)
- --strictPropertyInitialization (^ 2.7, 유효성 검사에 걸린 가장 근거 있는 이유)
from Quick Fix...
blockProperties!: Object
(구 버전에서는!
인식이 안 될 수 있음)blockProperties!: Object | undefined
- TypeScript가 아직 이런 부분에 대한 Support를 제대로 하지 못하는 것이지요? 그 부분이 궁금했습니다. 내가 잘못했는지, TypeScript가 잘못했는지... 음. TypeScript 에서도 이 문제를 인지하고 있고, 다른 해법을 제시하는 것 같군요. 친절한 답변 감사합니다. dbwodlf3 2020.7.23 15:00
- 아마 사용자 각자의 컨벤션이 있으니 transpiling 옵션으로 넣어 뒀을 겁니다.. --strictPropertyInitialization만 off하면 문제없이 잘 사용하실 수 있을 것 같은데요. 잘/잘못은 따지기 보다는 버전업 하면서 해당 옵션을 지원해 줬다는데에 의의를 두시는건 어떨지요. doodoji 2020.7.23 15:11
- 물론 설정이 조금 귀찮긴 합니다. 이건 개인적인 의견입니다만... 정적 타이핑 프로그래밍을 위해서라면 일부 타이핑을 위한 문법이나 요령, workaround, 몇몇 hacks은 인지하시고 사용시 그 번거로움을 감수 하셔야 할 부분인 것 같습니다. TypeScript도 완벽하지는 않으니까요. 일단은 IDE의 suggest나 quick fix의 도움을 최대한 받으세요. doodoji 2020.7.23 15:14
- ^^. dbwodlf3 2020.7.23 17:07
댓글 입력