Почти идиоматический код для точки входа бэкэнда 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.
@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"
]
}
}