Не удается найти определения типов для Nuxt, однако они определенно существуют и установлены - PullRequest
0 голосов
/ 15 октября 2019

Почти идиоматический код для точки входа бэкэнда Nuxt.js:

const express = require('express');
const consola = require('consola');
const { Nuxt, Builder } = require('nuxt');
const app = require('./app');

const config = require('../nuxt.config.js');
config.dev = !(process.env.NODE_ENV === 'production');

async function start() {

  const nuxt = new Nuxt(config);

  const {
    host = process.env.HOST || '127.0.0.1',
    port = process.env.PORT || 3000
  } = nuxt.options.server;

  if (config.dev) {
    const builder = new Builder(nuxt);
    await builder.build();
  }

  app.use(nuxt.render);

  app.listen(port, host, () => {
    consola.ready({
      message: `Server listening on http://${host}:${port}`,
      badge: true
    })
  })
}

start();

Мне нужно переписать его в TypeScript, при этом все типы должны быть аннотированы. Вот несколько трудностей, но в этом вопросе я собираюсь прояснить строку import { Nuxt, Builder } from "nuxt".

Компилятор TypeScript, а также IDE говорит мне:

Could not find a declaration file for module 'nuxt'. 
'D:/PhpStorm/Tutorials/Nuxt-TypeScript/node_modules/nuxt/dist/nuxt.js' 
implicitly has an 'any' type.

enter image description here

@types/nuxt не существует, поскольку Nuxt предоставляет собственные типы: @nuxt/types. Я явно устанавливаю эти типы в tsconfig.json:

{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
    "moduleResolution": "node",
    "lib": [
      "esnext",
      "esnext.asynciterable",
      "dom"
    ],
    "esModuleInterop": true,
    "experimentalDecorators": true,
    "sourceMap": true,
    "strict": true,
    "allowSyntheticDefaultImports": true,
    "noEmit": true,
    "baseUrl": ".",
    "resolveJsonModule": true,
    "paths": {
      "~/*": ["./*"]
    },
    "types": [
      "@types/node",
      "@types/webpack-env",
      "@nuxt/types",
      "element-ui/types"
    ]
  }
}
...