Home
All Posts
🚧

[캘린더 라이브러리] new Date() 관련 에러

Created
2024/03/09
Category
Troubleshoot
3 more properties
new Date() 관련해 에러가 났었고, 별 짓을 다하다 결국 원인은 어이없는 실수였다는 걸 깨달았다..

에러 상황

'new' expression, whose target lacks a construct signature, implicitly has an 'any' type.ts(7009)
위 에러 메시지의 의미를 해석해 보자면, 'new' 키워드를 사용하여 객체를 생성하려 할 때 해당 클래스나 생성자가 적절한 타입의 생성자 시그니처를 가지고 있지 않다는 것이다. 결과적으로 TypeScript는 해당 객체의 타입을 'any'로 간주하고 있다.

해결을 위한 시도들

애꿎은 ts.config.json 파일도 손보고, TS7009 에러 사례를 찾아 분석해 보기도 했다. (참고로 내가 이용한 이 사이트는 TypeScript 에러 코드들을 모아 설명한 사이트인데 잘못된 사례와 올바른 사례를 구체적으로 알려주어서 참고하기 좋았다.)
// Broken Code ❌ export function getPromise(): Promise<void> { return new Promise.resolve(); // 'new' 키워드 사용 } // Fixed Code ✅ // The resolve function of a Promise is not a constructor. // You can use the new keyword only with constructors, // so the new keyword has to be removed in order to fix the code: export function getPromise(): Promise<void> { return Promise.resolve(); // 'new' 키워드 대신 그냥 Promise 사용 } // Alternatively, you can make use of the constructor 👌 export function getPromise(): Promise<void> { return new Promise((resolve) => { // 아니면 화살표 함수 사용 resolve(); }); }
TypeScript
복사
위의 내용이 힌트가 되었던 게, ‘new’ 키워드가 중복으로 사용되었기 때문에 에러가 발생했다는 것을 알 수 있다.

해결한 방법

알고보니 내가 Date 라는 컴포넌트를 이미 사용하고 있었기에, 사용하려는 new Date와 중복되었고, 그래서 에러가 발생한 것이었다. 해결을 위해 기존 Date 컴포넌트를 DateComponent라고 바꾸었더니 해당 에러는 해결되었다.
흠 어쩐지 이상했다. new Date()가 JavaScript든 TypeScript든 쓰일 수 없을리가 없는 내장함수인데.. 갑자기 new Date메서드드를 사용할 수 없다고 해서 에러를 수정하면서도 의문이었다.

깨달음

앞으로는 예약어 사용을 더욱 조심해야겠다. 코딩하다가 무의식적으로 예약어를 사용하게 되는 경우가 종종 있는데, 더욱 의식적으로 조심할 필요가 있겠다. 개발이 이런 것 같다. 어이 없는 것 때문에 안 되다가 깨달음을 얻고 다음부턴 다신 안 하게 된다. 고로 잘 배운거다!

참고 자료