728x90
반응형
오늘 타입스크립트에서 함수를 작성하던 중 너무 힘빠지는 오류(?)를 발견하였다.
문제의 소스코드는 아래와 같다.
async getPostsAndPaginator(boardId: number, page: number, search: string) {
const perPage = 10;
const offset = (page - 1) * perPage;
const formattedSearch = `%${search}%`;
const posts = await this.postRepository
.createQueryBuilder("posts")
.select()
.where("posts.board_id = :boardId AND posts.title LIKE :formattedSearch", { boardId, formattedSearch })
.orderBy("posts.created_at", "DESC")
.offset(offset)
.limit(perPage)
.getMany();
const totalCount = await this.postRepository
.createQueryBuilder("posts")
.where("posts.board_id = :boardId AND posts.title LIKE :formattedSearch", { boardId, formattedSearch })
.orderBy("posts.created_at", "DESC")
.getCount();
const paginatorObj = paginator({
totalCount: totalCount,
page,
perPage,
});
return [posts, paginatorObj];
이렇게 코드를 작성하게 되면 vscode에서
Return type of public method from exported class has or is using name 'PaginatorResult' from external module "/Users/bottlesik/nodejs-workspace/my-board-api/src/utils/paginators" but cannot be named.ts(4053)
(method) PostsService.getPostsAndPaginator(boardId: number, page: number, search: string): Promise<(Posts[] | PaginatorResult)[]>
위와 같은 오류 메시지를 발생시킨다.
하지만 나는 도대체 뭐가 문제인지 모르기에 위 소스코드에서 주석처리된 부분을 살리고 그 위 쿼리빌더 내용을 날리면
해당 메소드가 아래와 같이 정의 된다.
(method) PostsService.getPostsAndPaginator(boardId: number, page: number, search: string): Promise<any[]>
여기서 둘의 차이를 비교해보면 : Promise<(Posts[] | PaginatorResult)[]>
vs : Promise<any[]>
이다
도대체가 왜 이렇게 리턴타입이 바뀌는지 도통 알 수 가 없어서 일단 위 소스코드에서 명시적으로 Promise<any[]>
를 리턴타입으로 지정해주어 해결했다. 그러나 뭐가 문제인지는 잘 모르겠다....
자바를 쓸 때는 기본적으로 리턴타입을 명시하니 이런 상황을 맞이하는 경우가 없었는데....
음 괜히 타입스크립트가 밉다.
반응형
'Javascript & Typescript' 카테고리의 다른 글
enum을 사용하는 이유 (0) | 2024.05.31 |
---|---|
TypeScript 컴파일 타임과 런타임에서의 URL 파라미터 처리 (0) | 2024.05.26 |
TypeScript 컴파일 과정 및 NestJS 프로젝트 빌드 (0) | 2024.05.26 |
Javascript 객체 인자를 사용하는 함수 호출에서 발생한 오류와 해결 방법 (0) | 2024.04.04 |
Redux란 (0) | 2024.04.01 |