Next.js 集成 TypeScript 完全指南

阅读时长 6 分钟读完

前言

Next.js 是一个流行的 React 后端渲染框架,使得构建渐进式网络应用变得更容易。它提供了从开箱即用的服务器端渲染,到自动代码分割、静态导出和 API 路由等一系列功能,让我们可以更专注于视图的开发和用户体验的提升。

TypeScript 是一个强类型的 JavaScript 的变异器,它可以让我们在开发时更加安全、可读、可维护,同时在编译时就可以发现潜在的 bug 和错误,非常适合于大型团队、大型项目的开发。

将这两者结合在一起,可以使得 Next.js 项目更可维护、更安全、更容易扩展。接下来,我们来看看如何在 Next.js 项目中集成 TypeScript。

安装 TypeScript 和相关库

首先,我们需要在项目中安装依赖:

如果使用 yarn,可以运行:

这里的 typescript 是 TypeScript 的主要依赖,@types/react@types/node 则是用于提供 React 和 Node.js 的声明文件。

配置 TypeScript

安装好依赖后,我们需要将 TypeScript 配置文件 tsconfig.json 添加到项目的根目录下,内容如下:

-- -------------------- ---- -------
-
  ------------------ -
    ---------- ----
    ------------------ -----
    ------ -----------
    ------ -
      ------
      ------
      --------
    --
    --------- -----------
    ------------------- -------
    --------- -----
    ----------------- -----
    --------------------- -----
    --------------------- -----
    ----------------- ------
    ------------ -----
    --------- -----
    --------- --------
  --
  ---------- -
    ----------
    ----------
  --
  ---------- -
    --------------
  -
-

这里我们可以看到,compilerOptions 是 TypeScript 编译器的配置项,比如:

  • baseUrl:用于解析非相对模块名称的基准目录,默认为 .
  • esModuleInterop:将 import foo from 'foo' 转换为 const foo = require('foo').default,避免在旧的 CommonJS 模块中遇到问题。
  • jsx:用于控制生成的 jsx 代码,有三个值:reactpreservereact-native
  • lib:指定编译时可以使用的库文件,这里我们使用了 domes6es2017
  • module:用于指定生成哪种类型的模块代码,这里我们使用了 CommonJS。
  • moduleResolution:用于指定模块解析策略,这里我们使用了 Node.js 的策略。
  • noEmit:不产生编译后的文件,仅用于类型检查。
  • noUnusedLocalsnoUnusedParameters:检测未使用的局部变量和函数参数。
  • preserveConstEnums:将常量枚举和普通枚举的处理方式保持一致。
  • removeComments:是否移除注释。
  • sourceMap:是否生成源代码映射文件。
  • strict:开启所有严格模式的检查项,包括 noImplicitAnynoImplicitReturnsnoImplicitThisalwaysStrict 等。
  • target:输出的 JavaScript 版本。

修改 Next.js 配置

现在,我们需要修改 Next.js 的配置文件 next.config.js,使得它能够理解 TypeScript 文件。可以使用 withTypeScript 辅助方法来完成 TypeScript 核心的设置,代码如下:

这里我们使用了 @zeit/next-typescript 库,它提供了一个 withTypeScript 方法,可以帮助我们快速集成 TypeScript 所需的所有配置,包括:

  • webpack 配置:首先会将 TypeScript 文件转换为 JavaScript 文件,然后再传递给后面的 Next.js 编译和优化过程。如果需要添加其他的 webpack 配置项,可以通过修改 next.config.js 来完成。
  • 扩展名支持:默认情况下,Next.js 只支持 JS 和 JSX 两种后缀名,通过使用 withTypeScript,我们可以将支持扩展名扩展为 .ts.tsx.json 三种格式。

添加示例代码

最后,我们来添加一个简单的示例页面 pages/index.tsx,内容如下:

-- -------------------- ---- -------
------ - -------- - ---- -------

--------- ----- -
  -------- -------
-

----- ------ --------------- - -- ------- -- -- -
  ------ -------------------
--

--------------------- - ----- -- -- -
  ------ - -------- ------ ---------- --- --------- --
--

------ ------- ------

这个示例页面 exports 了一个 Next.js 的 NextPage 类型,同时还定义了一个 Props 类型,它包含了一个 message 属性。最后,我们将 Index 组件作为默认的导出内容。

接着,在 Index 中,我们自定义了一个 getInitialProps 方法,它被 Next.js 用于在服务端渲染页面时获取数据。这里,我们给 getInitialProps 加了一个 async 前缀,从而可以使用 await 语法糖来获取异步数据。

最后,在页面中使用了 props 来展示页面中的文本内容。

总结

通过上面的步骤,我们已经成功地将 TypeScript 集成到了 Next.js 项目中。现在,我们可以更安全、可读、可维护地开发 Next.js 应用,同时也可以使用 TypeScript 的强大功能来提高项目的可靠性和性能。

完整的示例代码可以在 GitHub 仓库 中找到,欢迎大家 fork 和 star。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/647042b1968c7c53b0e63f1c

纠错
反馈