본문 바로가기
FE/error

[Typescript] error 2362: The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.

by s0ojin 2023. 3. 13.

에러 메세지


 

 

에러 원인


  const diffSeconds = (currentTime - createdTime) / 1000;

게시판에서 글작성 시간과 현재 시간을 비교해서 '몇 시간전, 방금 전' 등을 출력하는 함수를 작성중이었습니다.

위 코드에서 currentTime과  createdTime은 Date 타입인데, 타입스크립트에서 ' - ' 연산은 any, number, bigint만 가능하다는 겁니다.

 

 any, number, bigint 이외의 타입을 산술연산자(+, -, *, / 등)를 이용해 연산하려고 할 경우 위와 같은 에러가 발생합니다.

 

 

해결 방법


그렇다고 Date 타입을 any로 바꿀 수는 없으니 다른 방법을 고려해보아야합니다. 이럴 때 유용하게 사용할 수 있는 것이

valueOf() 함수입니다. valueOf()는 원시값을 반환해주는 함수로, Date객체와 함께 사용할 경우 Date 객체의 메서드들을 그대로 활용할 수 있습니다.

 

아래 코드처럼 수정 시 에러는 사라지고, 이전과 동일하게 작동합니다.

  const diffSeconds = (currentTime.valueOf() - createdTime.valueOf()) / 1000;

 

 

 

댓글