• 支持 TypeScript
    • 快速开始
    • 从 JavaScript 到 TypeScript
      • 配置文件
      • 组件
    • 使用ESLint

    支持 TypeScript

    静态类型系统有助于防止许多潜在的运行时错误,尤其是在应用程序不断增长时。

    这就是为什么Nuxt的全新 nuxt-ts 软件包提供了内置的 TypeScript 工具支持:

    • Nuxt官方类型声明
    • IDE 中的自动补全功能
    • 以TypeScript方式编写所有内容 (layouts, pages, components, plugins, store)
    • 支持TS编译 (nuxt.config.ts, modules, serverMiddlewares)
    • 支持TSX

    快速开始

    为了能够在项目中使用TypeScript,您需要将@nuxt/typescriptts-node作为开发依赖项安装:

    1. npm i -D @nuxt/typescript
    2. npm i ts-node
    3. # OR
    4. yarn add -D @nuxt/typescript
    5. yarn add ts-node

    @nuxt/typescript提供了在单独的进程来编译TypeScript文件和检查类型所需的typescript相关依赖项。

    ts-node扩展了Nuxt核心,为nuxt.config.tsserverMiddlewares开启了运行时TypeScript支持。

    您还需要通过代码编辑器或命令行在根项目文件夹中创建一个空的tsconfig.json文件:

    1. touch tsconfig.json

    提示: tsconfig.json文件将在您第一次运行nuxt命令时使用默认值自动更新。

    从 JavaScript 到 TypeScript

    配置文件

    为了能够在配置文件中使用TypeScript,您只需要将nuxt.config.js重命名为nuxt.config.ts

    Nuxt.js还带有提供自动补全和类型检查的类型定义:

    1. import NuxtConfiguration from '@nuxt/config'
    2. const config: NuxtConfiguration = {
    3. // Type or Press `Ctrl + Space` for autocompletion
    4. }
    5. export default config

    组件

    在组件中,我们强烈建议使用依赖于vue-class-component的vue-property-decorator。

    以下是可复用组件用来显示使用Nuxt中 asyncData获取的数据展示在页面中的基本示例。

    1. /* models/Post.ts */
    2. export default interface Post {
    3. id: number
    4. title: string
    5. description: string
    6. }
    1. <!-- components/PostPreview.vue -->
    2. <template>
    3. <div>
    4. <h2>{{ post.title }}</h2>
    5. <p>{{ post.description }}</p>
    6. </div>
    7. </template>
    8. <script lang="ts">
    9. import { Component, Vue, Prop } from 'vue-property-decorator'
    10. import Post from '~/models/Post'
    11. @Component
    12. export default class PostPreview extends Vue {
    13. @Prop({ type: Object, required: true }) post!: Post
    14. }
    15. </script>
    1. <!-- pages/feed.vue -->
    2. <template>
    3. <div>
    4. <PostPreview v-for="post in posts" :key="post.id" :post="post" />
    5. </div>
    6. </template>
    7. <script lang="ts">
    8. import axios from 'axios'
    9. import { Component, Vue } from 'vue-property-decorator'
    10. import Post from '~/models/Post'
    11. @Component({
    12. components: {
    13. PostPreview: () => import('~/components/PostPreview.vue')
    14. },
    15. async asyncData () {
    16. let { data } = await axios.get(`https://my-api/posts`)
    17. return {
    18. posts: data
    19. }
    20. }
    21. })
    22. export default class FeedPage extends Vue {
    23. posts: Post[] = []
    24. }
    25. </script>

    您可以对布局组件(layouts)使用完全相同的逻辑。

    使用ESLint

    If you're using ESLint to lint your project, here is how you can make ESLint lint your TypeScript files.如果您正在使用ESLint来对项目进行代码规范检查,那么您可以使用以下方法将ESLint添加进来:

    重点: 我们假设您已经在项目中设置了nuxt/eslint-config。

    首先,您需要安装typescript-eslint插件:

    1. npm install -D @typescript-eslint/eslint-plugin
    2. # OR
    3. yarn add -D @typescript-eslint/eslint-plugin

    然后,通过添加@typescript-eslint插件并使@typescript-eslint/parser作为默认解析器来编辑ESLint配置(.eslintrc.js)。

    最轻量化配置应如下所示:

    1. module.exports = {
    2. plugins: ['@typescript-eslint'],
    3. parserOptions: {
    4. parser: '@typescript-eslint/parser'
    5. },
    6. extends: [
    7. '@nuxtjs'
    8. ],
    9. rules: {
    10. '@typescript-eslint/no-unused-vars': 'error'
    11. }
    12. }

    最后,添加或编辑package.jsonlint脚本:

    1. "lint": "eslint --ext .ts,.js,.vue --ignore-path .gitignore ."

    —ignore-path option is useful to prevent ESLint linting files/folders like node_modules, .nuxt or whatever you don't want it to lint.

    —ignore-path选项对于忽略某些不想被检查的文件或文件夹(例如node_modules.nuxt或任何您不希望它被检查的文件或者文件夹)非常有用。

    您现在可以通过运行npm run lint (或者 yarn lint)来检查您的TypeScript文件的代码风格错误或其他不规范。