У меня есть функция getStaticProps
(следующая js), которая возвращает Обещание, преобразуя его в Объект со следующей подписью:
type StaticProps<P> = {
props: P;
revalidate?: number | boolean;
}
Я могу "развернуть" тип возвращаемого объекта обычно через:
type UnwrappedPromiseType <T extends (...args: any) => any> =
T extends (...args: any) => Promise<infer U> ? U :
T extends (...args: any) => infer U ? U : any
Из этого разрешенного типа мне нужен только предполагаемый тип {props: {}}
! Как я могу Pick
тип для {props: {}} из возвращенного типа?
полный пример:
import { PrismaClient, Post } from "@prisma/client";
import Link from "next/link";
const prisma = new PrismaClient();
// ts correctly infers this to:
// () => Promise<{props: {posts: Array<Post>}}>
export const getStaticProps = async () => ({
props: {
posts: await prisma.post.findMany(),
},
});
// i want to automatically infer the type for my props object
const Posts = ({ posts = [] }: {posts: Post[]}) => (
<main>
<h1>Posts:</h1>
<ul>
{posts.map((post) => (
<li key={post.id}>
<Link href={`/posts/${post.id}`}>
<a>{post.title}</a>
</Link>
</li>
))}
</ul>
</main>
);
export default Posts;