如何在 typescript next.js 中使用***“等待”

Posted

技术标签:

【中文标题】如何在 typescript next.js 中使用***“等待”【英文标题】:how can I use top level "await" in typescript next.js 【发布时间】:2021-09-21 03:22:27 【问题描述】:

当我像这样在顶层使用“等待”时:

 const LuckyDrawInstance=await new web3.eth.Contract(abi)

我在终端上收到一条警告:“set Experiments.topLevelAwait true”。当我尝试将此添加到“tsconfig.json”时,它仍然无法正常工作。它说“实验”属性不存在。

我可以将它包装在一个异步函数中,但我想在没有包装函数的情况下设置它。

【问题讨论】:

【参考方案1】:

与 tsconfig.json 无关。你必须在 next.config.js 中设置它。新版 next.js 使用 webpack5,webpack5 支持顶层 await。

module.exports = 
  webpack: (config) => 
    config.experiments =  topLevelAwait: true ;
    return config;
  ,
;

注意

你必须在功能组件之外使用它:

export default function Navbar() 
  // this will throw error
  // Syntax error: Unexpected reserved word 'await'.
  const provider=await customFunction()

  return (
    <section>          
    </section>
  );

警告

由于它是实验性的,它可能会在某些版本中被破坏

【讨论】:

【参考方案2】:

我已经为此苦苦挣扎了 2-3 天。这是一个有效的解决方案。请按照以下步骤操作。

1.将以下内容复制粘贴到您的 package.json 中


  "name": "projectname",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": 
    "test": "mocha",
    "dev": "next dev"
  ,
  "author": "",
  "license": "ISC",
  "dependencies": 
    "@truffle/hdwallet-provider": "^2.0.1",
    "fs-extra": "^10.0.0",
    "ganache-cli": "^6.12.2",
    "mocha": "^9.1.4",
    "next": "^12.0.8",
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "solc": "^0.8.9",
    "web3": "^1.7.0",
    "@babel/plugin-syntax-top-level-await": "^7.14.5"
  ,
  "devDependencies": 
    "@babel/plugin-syntax-top-level-await": "^7.14.5"
  

2。删除您的 node_modules 文件夹

3.转到项目的根目录并使用npm install 命令重新安装所有包

4.在项目的根目录中创建一个新文件并将其命名为"next.config.js"

5.将以下代码复制粘贴到next.config.js 文件中并保存。

module.exports = 
  // target: 'experimental-serverless-trace',
  webpack: (config) => 
    config.experiments = config.experiments || ;
    config.experiments.topLevelAwait = true;
    return config;
  ,
;

【讨论】:

以上是关于如何在 typescript next.js 中使用***“等待”的主要内容,如果未能解决你的问题,请参考以下文章

如何在 TypeScript 中使装饰器类型安全?

如何使用 Next.js、Ant Design、Less 和 TypeScript 配置 Storybook.js Webpack

在 Typescript 中使数组元素可以为空

使用 Typescript 使用 getInitialProps 将 prop 传递到 Next.js 中的每个页面

在带有 TypeScript 的 Next.js 中使用 getInitialProps

Next Js & Typescript - 类型上不存在属性 setState 示例