Definitelytyped: [@ types / express] Последние типы выбрасывают Свойство 'заголовки', 'тело', 'запрос' не существует для типа 'Запрос<any>'</any>

Созданный на 4 нояб. 2019  ·  30Комментарии  ·  Источник: DefinitelyTyped/DefinitelyTyped

Если вы знаете, как решить проблему, сделайте запрос на вытягивание.

  • [X] Я пробовал использовать пакет @types/express , и у меня возникли проблемы.
  • [X] Я пробовал использовать последнюю стабильную версию tsc. https://www.npmjs.com/package/typescript
  • [X] У меня вопрос, который не подходит для StackOverflow . (Пожалуйста, задавайте там любые уместные вопросы).
  • [X] [Упоминание] (https://github.com/blog/821-mention-somebody-they-re-notified) авторов (см. Definitions by: в index.d.ts ), чтобы они могли реагировать.

    • Авторы: @borisyankov , @cmuh , @ rockwyc992 , @OliverJAsh

Мои сборки выдают следующие ошибки после обновления до последней версии пакета @ 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'

Кажется, было внесено какое-то критическое изменение, и я не могу найти никаких рекомендаций о том, как его исправить.

Самый полезный комментарий

Я решил эту проблему с пряжей , выполнив:

$ rm -f yarn.lock
$ yarn cache clean
$ yarn

Хорошего дня!

Все 30 Комментарий

Удалите @ 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) { ... }
Была ли эта страница полезной?
0 / 5 - 0 рейтинги