gpt4 book ai didi

javascript - 使用 getStaticPaths 参数时如何键入 getStaticProps 函数?

转载 作者:行者123 更新时间:2023-12-05 09:33:34 25 4
gpt4 key购买 nike

我正在处理以下代码:

这是一个 blogPost 动态页面:/post/[slug].tsx

export const getStaticPaths: GetStaticPaths = async () => {
const allSlugs = await getAllSlugs();;
return ({
paths: allSlugs.map((slug) => ({ params: { slug }})),
fallback: "blocking"
});
};

export const getStaticProps: GetStaticProps = async (context) => {
const slug = context.params.slug;
const blogPost = getBlogPostFromSlug({slug});
return ({
props: {
blogPost
}
});
};

这是我遇到的错误:

enter image description here

GetStaticProps 类型似乎是通用的,可以为我的类型定制。

enter image description here

我创建了这两种类型来尝试自定义 GetStaticProps 类型:

type ContextParams = {
slug: string
}

type PageProps = {
blogPost: null | Types.BlogPost.Item
}

这是我正在尝试的:

export const getStaticProps: GetStaticProps<PageProps,ContextParams> = async (context) => {
const slug = context.params.slug;
const blogPost = await getBlogPostFromSlug({slug});
return ({
props: {
blogPost
}
});
};

但它仍然认为 params 可能未定义。我应该处理它吗?从上面的代码看,params 似乎是未定义的吗?我没想到会这样。

最佳答案

类型的定义使得 params 变量必须仍然是 undefined,即使您声明了 params Q 的类型。来自 the types file :

export type GetStaticPropsContext<Q extends ParsedUrlQuery = ParsedUrlQuery> = {
params?: Q
...

因此,如果您想安全起见,您应该假设您可能没有params。我会使用 notFoundredirect 属性 explained here处理缺少 params 的请求。您还想处理 async 函数 getBlogPostFromSlug 被拒绝的情况。

export const getStaticProps: GetStaticProps<PageProps, ContextParams> = async (
context
) => {
const slug = context.params?.slug;
if (slug) {
try {
const blogPost = await getBlogPostFromSlug({ slug });
return {
props: {
blogPost
}
};
} catch (error) { }
}
return {
notFound: true
};
};

Typescript Playground Link

关于javascript - 使用 getStaticPaths 参数时如何键入 getStaticProps 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67110954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com