Если вы знаете, как решить проблему, сделайте запрос на вытягивание.
@types/express
, и у меня возникли проблемы.Definitions by:
в index.d.ts
), чтобы они могли реагировать.Мои сборки выдают следующие ошибки после обновления до последней версии пакета @ types / express:
Property 'headers' does not exist on type 'Request<any>'
Property 'query' does not exist on type 'Request<any>'
Property 'body' does not exist on type 'Request<any>'
С нашей стороны мы ничего не изменили. Я также заметил, что моя среда TS, когда я открываю index.d.ts @ types / express, показывает следующие ошибки:
`express-serve-static-core` has no exported member 'ParamsDictionary'
`express-serve-static-core` has no exported member 'Params'
`express-serve-static-core` has no exported member 'Params'
Кажется, было внесено какое-то критическое изменение, и я не могу найти никаких рекомендаций о том, как его исправить.
Удалите @ types / express и вместо этого установите @ types / express-serve-static-core, а затем просто перезапустите компилятор машинописного текста.
Здесь та же проблема! Он работает в 4.17.1, но не в 4.17.2, так что якобы обновление на уровне патча ломается.
@ghostganz @duro Не могли бы вы дать несколько шагов, чтобы воспроизвести проблему?
Этот файл работает с 4.17.1:
import { Request } from 'express';
function isHealthCheck(req: Request): boolean {
return req.method === 'GET' && req.query.healthCheck === 'true';
}
export default isHealthCheck;
В версии 4.17.2 мы получаем следующие ошибки компиляции:
TS2339: Property 'method' does not exist on type 'Request<any>'.
TS2339: Property 'query' does not exist on type 'Request<any>'.
express-serve-static-core
не имеет экспортированного члена 'ParamsDictionary'
express-serve-static-core
не имеет экспортированного члена 'Params'
express-serve-static-core
не имеет экспортированного члена 'Params'
Это говорит о том, что вам необходимо обновить @types/express-serve-static-core
, что является зависимостью от @types/express
.
У меня была такая же проблема, и я могу подтвердить, что обновление @types/express-serve-static-core
до 4.16.11
устранило проблему для меня. Мой файл блокировки пакета ранее заблокировал версию до 4.16.7
.
В версии 4.17.2 мы получаем следующие ошибки компиляции:
TS2339: Property 'method' does not exist on type 'Request<any>'. TS2339: Property 'query' does not exist on type 'Request<any>'.
В моем случае он также работает с @types/express
4.17.2.
@duro @ghostganz Не могли бы вы удалить node_modules
, package-lock.json
, yarn.lock
и повторить попытку?
Если это не сработает, вставьте свои package.json
.
Этот простейший package.json
работает с yarn install
, но не работает с npm install
или yarn install --flat
.
package.json
{
"dependencies": {
"@types/express": "4.17.2",
"@types/express-serve-static-core": "4.16.8",
"@types/node": "^12.12.5",
"typescript": "^3.6.4"
}
}
Поскольку @types/express
4.17.2 (# 38887) зависит от @types/express-serve-static-core
4.16.9 (# 37718) для обеспечения использования generic
.
У меня такая же проблема, только что обновился до 4.17.2 и все сломалось.
Я сделал то, что @ rockwyc992 просил об удалении package-lock и node_modules, это решает проблему.
Та же проблема при переходе с 4.17.1 (где все работало) на 4.17.2
Тем же. Запуск rm -rf node modules && rm package-lock.json && npm update
устранил эту проблему, но теперь все мои req.params принудительно записаны в строки.
Определенно критическое изменение, а не патч.
Та же проблема между версиями 4.17.1 и 4.17.2
Я исправил это в своей кодовой базе, временно привязав экспресс к 4.17.0:
"dependencies": {
"express": "4.17.0"
},
"devDependencies": {
"@types/express": "4.17.0"
}
У меня была такая же проблема, и я решил ее, добавив "skipLibCheck": true
к tsconfig.json
Определенно критическое изменение, а не патч.
@timhannon Я согласен с вами, но мы должны следовать МИНИМАЛЬНОЙ версии с Express.js
.
Возможно, мы могли бы сохранить это изменение, используя Express.js
выпущенную новую версию 4.18
.
Это трудная работа. Я делаю этот пул-реквест (# 38478) запуском 19.09, а окончательно он объединяется 02.11.
У меня нет времени отслеживать весь этот месяц, может быть, дольше, чем я думал, просто чтобы это изменение не нарушало никаких существующих кодов.
Извините за то, что заставили вас всех увеличить версию @types/express
, но стоит сделать Express.js
более близким с помощью TypeScript
и сделать ваш код более стабильным с помощью проверки типов.
Почему необходимая версия @types/express-serve-static-core
обновляется в @types/express
если она работает только с последней версией?
Почему необходимая версия
@types/express-serve-static-core
обновляется в@types/express
если она работает только с последней версией?
package.json
из @types/express
генерируется @ typescript-bot автоматически.
@Pajn Можем ли мы изменить это, как нам нужно? Если можно, сделайте новый запрос на перенос, спасибо.
Можем ли мы изменить это по своему усмотрению?
Понятия не имею, но если мы не можем, это кажется серьезным ограничением. Это не первый случай, когда обновление патча в пакетах @types вызывает серьезные проблемы.
@DanielRosenwasser @sandersn Знаете ли вы, можно ли для @types/express
указать минимальную версию @types/express-serve-static-core
?
это работает для меня yarn remove express-serve-static-core
Эта ошибка все еще повторяется, и я тоже получаю ее за ^4.17.0
.
Нашел.
Проблема в файле блокировки. Вам просто нужно удалить строки, относящиеся к express-serve-static-file
и перезапустить yarn
или npm i
.
В моем yarn.lock
файле это то, что у меня было после обновления @types/express
до 4.17.2
:
"@types/express-serve-static-core@*":
version "4.16.7"
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.7.tgz#50ba6f8a691c08a3dd9fa7fba25ef3133d298049"
integrity sha512-847KvL8Q1y3TtFLRTXcVakErLJQgdpFSaq+k043xefz9raEf0C7HalpSY7OW5PyjCnY8P7bPW5t/Co9qqp+USg==
dependencies:
"@types/node" "*"
"@types/range-parser" "*"
"@types/express@^4.17.2":
version "4.17.2"
resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.2.tgz#a0fb7a23d8855bac31bc01d5a58cadd9b2173e6c"
integrity sha512-5mHFNyavtLoJmnusB8OKJ5bshSzw+qkMIBAobLrIM48HJvunFva9mOa6aBwh64lBFyNwBbs0xiEFuj4eU/NjCA==
dependencies:
"@types/body-parser" "*"
"@types/express-serve-static-core" "*"
"@types/serve-static" "*"
Вы можете увидеть несоответствие версий.
Итак, я удалил первый блок, снова yarn
, и вот что у меня есть сейчас:
"@types/express-serve-static-core@*":
version "4.17.2"
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.2.tgz#f6f41fa35d42e79dbf6610eccbb2637e6008a0cf"
integrity sha512-El9yMpctM6tORDAiBwZVLMcxoTMcqqRO9dVyYcn7ycLWbvR8klrDn8CAOwRfZujZtWD7yS/mshTdz43jMOejbg==
dependencies:
"@types/node" "*"
"@types/range-parser" "*"
"@types/express@^4.17.2":
version "4.17.2"
resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.2.tgz#a0fb7a23d8855bac31bc01d5a58cadd9b2173e6c"
integrity sha512-5mHFNyavtLoJmnusB8OKJ5bshSzw+qkMIBAobLrIM48HJvunFva9mOa6aBwh64lBFyNwBbs0xiEFuj4eU/NjCA==
dependencies:
"@types/body-parser" "*"
"@types/express-serve-static-core" "*"
"@types/serve-static" "*"
Больше никаких несоответствий и ошибок.
Я заставил его работать после запуска yarn remove
для всех типов, связанных с express (включая express-jwt) и повторного добавления их впоследствии.
Я решил эту проблему с пряжей , выполнив:
$ rm -f yarn.lock
$ yarn cache clean
$ yarn
Хорошего дня!
Для меня это было express-serve-static-core, которое вызвало проблему, обновленное до последней версии express и @ types / express, удаленное express-serve-static-core && @ types / express-serve-static-core, и работал у меня.
Вначале я думал, что это из-за боди-парсера, но нет.
Для кода Windows, npm и VS с автоматическим получением типа я исправил это, перейдя в %localappdata%\Microsoft\TypeScript\
, зайдите в папку последней версии, например: 3.9
и запустите npm install @types/express-serve-static-core
Я не уверен, почему @types/express-serve-static-core
не установлен на моей основной машине, которая довольно давно использует машинописный текст. Но для моей другой свежей машины она там уже установлена.
Обновлять:
Я думаю, что запуск npm update
там тоже работает.
это все еще проблема в 2020 году. Я имею в виду, что в 2020 году много чего не так, но это сохраняется с 2017 года, как будто давай, ребята
@ xtianus79 TBH , koa
и fastify
- гораздо лучший выбор фреймворка в 2020 году. Express хорошо работал, но теперь это явно устаревшая библиотека.
Ответом для меня была явная установка @types/express-serve-static-core
в дополнение к @types/express
.
Из моего package.json
:
"@types/express": "^4.17.6",
"@types/express-serve-static-core": "~4.17.7"
При обновлении @types/express
с "4.17.2" до "4.17.6" я получил следующие ошибки:
error TS2694: Namespace '"@types/express-serve-static-core/index"' has no exported member 'Query'.
error TS2707: Generic type 'ErrorRequestHandler' requires between 0 and 3 type arguments.
error TS2694: Namespace '"@types/express-serve-static-core/index"' has no exported member 'Query'.
error TS2707: Generic type 'Request<P, ResBody, ReqBody>' requires between 0 and 3 type arguments.
error TS2694: Namespace '"@types/express-serve-static-core/index"' has no exported member 'Query'.
error TS2707: Generic type 'RequestHandler<P, ResBody, ReqBody>' requires between 0 and 3 type arguments.
Я позвонил в yarn why @types/express-serve-static-core
и проверил, какая у меня версия:
info Reasons this module exists
- "@types#express" depends on it
- Hoisted from "@types#express#@types#express-serve-static-core"
Запуск yarn upgrade --latest
в моем проекте помог, потому что он обновил базовую версию "@ types / express-serve-static-core" в yarn.lock
.
Это все еще проблема, установлены последние типы express / express-serve-static-core. Проблема заключается в расширении интерфейса запроса.
interface ExampleRequest extends Request {
example: any
}
// No overload matches this call...
router.use('/api', async function (req:ExampleRequest, res, next) { ... }
Самый полезный комментарий
Я решил эту проблему с пряжей , выполнив:
Хорошего дня!