타입스크립트의 우아함
함수의 리턴값에서 역으로 데이터 타입을 정의하는 것을 보았습니다.
아래의 PostForListDisplay 가 그렇게 정의되었습니다.
Awaited<ReturnType<typeof fetchPostsByTopicSlug>>[number]
이게 뭔가 싶었지만 침착하게 보면 “async 함수가 리턴하는 리스트의 엔트리 하나” 입니다
prisma query가 바뀌면 저절로 데이터 타입이 바뀌니, 작업순서도 쿼리를 먼저 바꾸고 로직을 변경하는 방식이 되겠네요.
매우 우아하다는 느낌입니다.
import type { Post } from '@prisma/client';
import { db } from '..';
// export type PostForListDisplay = Post & {
// topic: { slug: string };
// user: { name: string | null };
// _count: { comments: number };
// };
export type PostForListDisplay =
Awaited<ReturnType<typeof fetchPostsByTopicSlug>>[number]
export function fetchPostsByTopicSlug(
slug: string,
) {
return db.post.findMany({
where: { topic: { slug } },
include: {
topic: { select: { slug: true } },
user: { select: { name: true } },
_count: { select: { comments: true } },
},
});
}