Definitelytyped: [@ types / express] Últimos tipos lançam Propriedade 'headers', 'body', 'query' não existe no tipo 'Request<any>'</any>

Criado em 4 nov. 2019  ·  30Comentários  ·  Fonte: DefinitelyTyped/DefinitelyTyped

Se você souber como corrigir o problema, faça uma solicitação pull.

  • [X] Tentei usar o pacote @types/express e tive problemas.
  • [X] Tentei usar a versão estável mais recente do tsc. https://www.npmjs.com/package/typescript
  • [X] Eu tenho uma pergunta que é inadequada para StackOverflow . (Por favor, faça quaisquer perguntas apropriadas lá).
  • [X] [Mencione] (https://github.com/blog/821-mention-somebody-they-re-notified) os autores (consulte Definitions by: em index.d.ts ) para que eles possam responder.

    • Autores: @borisyankov , @cmuh , @ rockwyc992 , @OliverJAsh

Minhas compilações estão gerando os seguintes erros após as atualizações para a versão mais recente do pacote @ 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>'

Não mudamos nada do nosso lado. Também percebi que meu ambiente de TS, ao abrir o index.d.ts de @ types / express, mostra os seguintes erros:

`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'

Parece que foi introduzido algum tipo de alteração significativa e não consigo encontrar nenhuma orientação sobre como lidar com isso.

Comentários muito úteis

Resolvi esse problema com o fio fazendo:

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

Tenha um bom dia!

Todos 30 comentários

Desinstale @ types / express e instale @ types / express-serve-static-core , então apenas reinicie o compilador typescript.

Mesmo problema aqui! Ele funciona no 4.17.1, mas não no 4.17.2, de modo que a atualização supostamente no nível do patch está interrompendo.

@ghostganz @duro Você poderia fornecer algumas etapas para reproduzir o problema?

Este arquivo funciona com 4.17.1:

import { Request } from 'express';

function isHealthCheck(req: Request): boolean {
  return req.method === 'GET' && req.query.healthCheck === 'true';
}

export default isHealthCheck;

Com 4.17.2, obtemos estes erros de compilação:

TS2339: Property 'method' does not exist on type 'Request<any>'.
TS2339: Property 'query' does not exist on type 'Request<any>'.

express-serve-static-core não exportou membro 'ParamsDictionary'

express-serve-static-core não exportou 'Params' de membro

express-serve-static-core não exportou 'Params' de membro

Isso sugere que você precisa atualizar @types/express-serve-static-core , que é uma dependência de @types/express .

Eu tive o mesmo problema e posso confirmar que a atualização de @types/express-serve-static-core para 4.16.11 corrigiu o problema para mim. Meu arquivo de bloqueio de pacote havia bloqueado a versão para 4.16.7 anteriormente.

Com 4.17.2, obtemos estes erros de compilação:

TS2339: Property 'method' does not exist on type 'Request<any>'.
TS2339: Property 'query' does not exist on type 'Request<any>'.

No meu caso, também funciona com @types/express 4.17.2.

@duro @ghostganz Você poderia deletar node_modules , package-lock.json , yarn.lock e tentar novamente?
Se não funcionar, cole seu package.json .

Este package.json mais simples funciona com yarn install , mas não funciona com npm install ou 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" } }

Porque @types/express 4.17.2 (# 38887) depende de @types/express-serve-static-core 4.16.9 (# 37718) para fornecer generic uso.

Eu tive o mesmo problema, apenas atualizei para 4.17.2 e tudo quebrou.

Eu fiz o que @ rockwyc992 perguntou sobre a remoção de package-lock e node_modules, isso corrige o problema

O mesmo problema passou de 4.17.1 (onde tudo estava funcionando) para 4.17.2

Mesmo. A execução de rm -rf node modules && rm package-lock.json && npm update corrigiu esse problema, mas agora todos os meus req.params são forçados a usar strings.

Definitivamente uma mudança significativa e não um patch.

Mesmo problema entre as versões 4.17.1 e 4.17.2

Corrigi isso em minha base de código fixando temporariamente o expresso em 4.17.0:

"dependencies": { "express": "4.17.0" }, "devDependencies": { "@types/express": "4.17.0" }

Eu tive o mesmo problema e resolvi-o com "skipLibCheck": true adicionado a tsconfig.json

Definitivamente uma mudança significativa e não um patch.

@timshannon Eu concordo com você, mas precisamos seguir a versão MENOR com Express.js .
Talvez pudéssemos manter essa mudança util Express.js nova versão lançada 4.18 .

É um trabalho difícil. Eu faço esta solicitação pull (# 38478) a partir de 19/09 e ela finalmente é mesclada em 02/11.
Não tenho tempo para rastrear este mês inteiro, talvez mais do que eu pensava, apenas para manter essa mudança sem quebrar nenhum código existente.

Desculpe por tornar a versão bump de @types/express , mas vale a pena fazer Express.js mais perto com TypeScript e tornar seu código mais estável com a verificação de tipo.

Por que a versão necessária de @types/express-serve-static-core atualizada em @types/express se só funciona com a versão mais recente?

Por que a versão necessária de @types/express-serve-static-core atualizada em @types/express se só funciona com a versão mais recente?

O package.json de @types/express é gerado por @ typescript-bot automaticamente.

@Pajn Podemos modificar isso conforme a necessidade? Se puder, faça uma nova solicitação de pull, thx.

Podemos modificar isso conforme a necessidade?

Não tenho ideia, mas se não conseguirmos, isso parece uma limitação severa. Esta não é a primeira vez que uma atualização de patch em pacotes @types causa um grande problema.

@DanielRosenwasser @sandersn Você sabe se seria possível para @types/express especificar uma versão mínima de @types/express-serve-static-core ?

funciona para mim yarn remove express-serve-static-core

Este erro ainda persiste e estou recebendo por ^4.17.0 também.

Encontrei.
O problema é com o arquivo de bloqueio. Você simplesmente precisa excluir as linhas referentes a express-serve-static-file e reiniciar um yarn ou npm i .

Dentro do meu arquivo yarn.lock , isto é o que eu tive depois de um upgrade de 4.17.2 @types/express para 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" "*"

Você pode ver a incompatibilidade de versão.
Então eu apaguei o primeiro bloco, yarn novamente, e isto é o que eu tenho agora:

"@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" "*"

Sem mais incompatibilidades e sem mais erros.

Comecei a trabalhar depois de executar yarn remove em todos os tipos relacionados ao Express (incluindo express-jwt) e adicioná-los novamente depois.

Resolvi esse problema com o fio fazendo:

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

Tenha um bom dia!

Para mim, foi express-serve-static-core que causou o problema, atualizado para a versão mais recente de express e @ types / express, removeu express-serve-static-core && @ types / express-serve-static-core, e funcionou para mim.

No início, pensei que fosse devido ao analisador de corpo, mas não.

Para Windows, código npm e VS com aquisição automática de tipo, corrigi isso indo para %localappdata%\Microsoft\TypeScript\ , vá para a pasta da versão mais recente, por exemplo: 3.9 e execute npm install @types/express-serve-static-core

Não sei por que @types/express-serve-static-core não está instalado lá para minha máquina principal, que tem usado o texto datilografado por um bom tempo. Mas para minha outra máquina nova, ela já está instalada lá.

Atualizar:
Acho que executar npm update também funciona.

isso ainda é um problema em 2020. Quero dizer, há um monte de coisas erradas em 2020, mas isso tem persistido desde 2017, como vamos lá, pessoal

@ xtianus79 TBH, koa e fastify são opções de framework muito melhores em 2020. O Express teve uma boa execução, mas agora é uma biblioteca obviamente legada.

A resposta para mim foi instalar explicitamente @types/express-serve-static-core além de @types/express .

Do meu package.json :

    "@types/express": "^4.17.6",
    "@types/express-serve-static-core": "~4.17.7"

Recebi os seguintes erros ao atualizar @types/express de "4.17.2" para "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.

Liguei para yarn why @types/express-serve-static-core e verifiquei qual versão tenho:

info Reasons this module exists
   - "@types#express" depends on it
   - Hoisted from "@types#express#@types#express-serve-static-core"

Executar yarn upgrade --latest em meu projeto ajudou porque atualizou a versão subjacente de "@ types / express-serve-static-core" em yarn.lock .

Isso ainda é um problema, instalou os tipos mais recentes de express / express-serve-static-core. O problema é ao estender a interface Request.

interface ExampleRequest extends Request {
  example: any
}
// No overload matches this call...
router.use('/api', async function (req:ExampleRequest, res, next) { ... }
Esta página foi útil?
0 / 5 - 0 avaliações