如何从 getStaticProps 返回重定向而不从 TypeScript 出错?

Posted

技术标签:

【中文标题】如何从 getStaticProps 返回重定向而不从 TypeScript 出错?【英文标题】:How to return redirect from getStaticProps without error from TypeScript? 【发布时间】:2021-08-21 17:43:58 【问题描述】:

问题

我将 Next.js 与 TypeScript 一起使用。如果数据不存在,当我尝试返回重定向时出现错误。

代码

import  GetStaticProps  from "next";
import fs from "fs/promises";
import path from "path";

function HomePage( products :  products:  id: string; title: string [] ) 
  return (
    <ul>
      products.map((product) => 
        <li key=product.id>product.title</li>;
      )
    </ul>
  );


export const getStaticProps: GetStaticProps = async () => 
  const filePath = path.join(process.cwd(), "data", "dummy-backend.json");
  const jsonData = await fs.readFile(filePath);
  const data = JSON.parse(jsonData.toString());

  // THE PROBLEM
  if (!data) 
    return 
      redirect: 
        destination: "/no-data",
      ,
    ;
  

  if (data.products.length === 0) 
    return  notFound: true ;
  

  return  props:  products: data.products , revalidate: 10 ;
;

export default HomePage;

错误信息

Type '() => Promise' 不可分配给类型 'GetStaticProps'。输入'承诺' 是 不可分配给类型 'Promise>'。 输入'重定向:目的地:字符串; ;未找到?:未定义;道具?:未定义;重新验证?:未定义; | 未找到:真; 重定向?:未定义;道具?:未定义;重新验证?:未定义; | 道具: ...; ;重新验证:数字;重定向?:未定义;未找到?: 不明确的; ' 不可分配给类型 'GetStaticPropsResult'。 输入'重定向:目的地:字符串; ;未找到?:未定义;道具?:未定义;重新验证?:未定义; ' 不是 可分配给类型 'GetStaticPropsResult'。 输入'重定向:目的地:字符串; ;未找到?:未定义;道具?:未定义;重新验证?:未定义; ' 不是 可分配给类型 ' props: [key: string]: any; ;重新验证?: 号码 |布尔值 |不明确的; '。 属性“道具”的类型不兼容。 类型 'undefined' 不能分配给类型 ' [key: string]: any; '.ts(2322)

这个错误是由这段代码引起的

if (!data) 
    return 
      redirect: 
        destination: "/no-data",
      ,
    ;
  

【问题讨论】:

【参考方案1】:

根据这个文档,https://nextjs.org/docs/basic-features/data-fetching 的代码应该是这样的。目的地和永久都需要。

if (!data) 
    return 
      redirect: 
        destination: "/",
        permanent: false,
      ,
    ;
  

【讨论】:

以上是关于如何从 getStaticProps 返回重定向而不从 TypeScript 出错?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 getstaticprops 函数中的 Context API 获取数据?

如何使授权属性返回自定义 403 错误页面而不是重定向到登录页面

如何配置 Krakend 使其按原样返回 http 重定向响应而不是遵循 http 重定向?

AuthorizeFilter 失败时如何返回 403 而不是重定向访问被拒绝

如何从 .POST HTTP 请求访问重定向的 URL 响应

当用户从我重定向到的远程站点返回时,我如何找到用户?