Se você souber como corrigir o problema, faça uma solicitação pull.
@types/express
e tive problemas.Definitions by:
em index.d.ts
) para que eles possam responder.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.
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) { ... }
Comentários muito úteis
Resolvi esse problema com o fio fazendo:
Tenha um bom dia!