Definitelytyped: [@types/express] Tipe terbaru throw Properti 'header', 'body', 'query' tidak ada pada tipe 'Request<any>'</any>

Dibuat pada 4 Nov 2019  ·  30Komentar  ·  Sumber: DefinitelyTyped/DefinitelyTyped

Jika Anda tahu cara memperbaiki masalah, buat permintaan tarik sebagai gantinya.

  • [X] Saya mencoba menggunakan paket @types/express dan mengalami masalah.
  • [X] Saya mencoba menggunakan tsc versi stabil terbaru. https://www.npmjs.com/package/typescript
  • [X] Saya punya pertanyaan yang tidak pantas untuk StackOverflow . (Silakan ajukan pertanyaan yang sesuai di sana).
  • [X] [Sebutkan](https://github.com/blog/821-mention-somebody-they-re-notified) penulis (lihat Definitions by: di index.d.ts ) sehingga mereka dapat menanggapi.

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

Bangunan saya menimbulkan kesalahan berikut setelah memutakhirkan ke versi terbaru dari paket @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>'

Kami tidak mengubah apa pun di pihak kami. Saya juga memperhatikan bahwa lingkungan TS saya, ketika saya membuka index.d.ts dari @types/express menunjukkan kesalahan berikut:

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

Beberapa jenis perubahan yang melanggar tampaknya telah diperkenalkan, dan sepertinya saya tidak dapat menemukan panduan tentang cara mengatasinya.

Komentar yang paling membantu

Saya memecahkan masalah ini dengan benang dengan melakukan:

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

Semoga harimu menyenangkan!

Semua 30 komentar

Hapus instalasi @types/express dan instal @types/express-serve-static-core sebagai gantinya , lalu mulai ulang kompiler TypeScript.

Masalah yang sama disini! Ini berfungsi di 4.17.1 tetapi tidak di 4.17.2, sehingga pembaruan tingkat patch yang seharusnya rusak.

@ghostganz @duro Bisakah Anda memberikan beberapa langkah untuk mereproduksi masalah?

File ini berfungsi dengan 4.17.1:

import { Request } from 'express';

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

export default isHealthCheck;

Dengan 4.17.2 kami mendapatkan kesalahan kompilasi ini:

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

express-serve-static-core tidak memiliki anggota yang diekspor 'ParamsDictionary'

express-serve-static-core tidak memiliki anggota yang diekspor 'Params'

express-serve-static-core tidak memiliki anggota yang diekspor 'Params'

Ini menyarankan Anda perlu memutakhirkan @types/express-serve-static-core , yang merupakan ketergantungan @types/express .

Saya memiliki masalah yang sama dan dapat mengonfirmasi pembaruan @types/express-serve-static-core ke 4.16.11 memperbaiki masalah untuk saya. File kunci paket saya telah mengunci versi ke 4.16.7 sebelumnya.

Dengan 4.17.2 kami mendapatkan kesalahan kompilasi ini:

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

Dalam kasus saya, ini bekerja dengan @types/express 4.17.2 juga.

@duro @ghostganz Bisakah Anda menghapus node_modules , package-lock.json , yarn.lock dan coba lagi?
Jika tidak berhasil, silakan rekatkan package.json .

package.json paling sederhana ini berfungsi dengan yarn install , tetapi tidak berfungsi dengan npm install atau 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" } }

Karena @types/express 4.17.2 (#38887) bergantung pada @types/express-serve-static-core 4.16.9 (#37718) untuk menyediakan penggunaan generic .

Saya mendapat masalah yang sama, baru saja memperbarui ke 4.17.2 dan semuanya rusak.

Saya melakukan apa yang @rockwyc992 tanyakan tentang menghapus package-lock dan node_modules, itu memperbaiki masalah

Masalah yang sama melompat dari 4.17.1 (di mana semuanya berfungsi) ke 4.17.2

Sama. Menjalankan rm -rf node modules && rm package-lock.json && npm update memperbaiki masalah itu, tetapi sekarang semua req.params saya dipaksa menjadi string.

Jelas perubahan yang melanggar dan bukan tambalan.

Masalah yang sama antara versi 4.17.1 dan 4.17.2

Saya memperbaikinya di basis kode saya dengan menyematkan ekspres sementara ke 4.17.0:

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

Saya memiliki masalah yang sama dan menyelesaikannya dengan "skipLibCheck": true ditambahkan ke tsconfig.json

Jelas perubahan yang melanggar dan bukan tambalan.

@timshannon Saya setuju dengan Anda, tetapi kita harus mengikuti versi MINOR dengan Express.js .
Mungkin kita bisa menyimpan perubahan ini util Express.js merilis versi baru 4.18 .

Ini pekerjaan yang sulit. Saya membuat permintaan tarik ini (#38478) mulai dari 09/19 , dan akhirnya digabungkan pada 11/02.
Saya tidak punya waktu untuk melacak sepanjang bulan ini, mungkin lebih lama dari yang saya kira, hanya untuk menjaga agar perubahan ini tidak merusak kode yang ada.

Maaf membuat Anda semua menabrak versi @types/express , tetapi itu layak untuk membuat Express.js lebih dekat dengan TypeScript dan membuat kode Anda lebih stabil dengan Type Checking.

Mengapa versi @types/express-serve-static-core diperbarui di @types/express jika hanya berfungsi dengan versi terbaru?

Mengapa versi @types/express-serve-static-core diperbarui di @types/express jika hanya berfungsi dengan versi terbaru?

package.json dari @types/express dihasilkan oleh @typescript-bot secara otomatis.

@Pajn Bisakah kita memodifikasinya sesuai kebutuhan? Kalo bisa tolong buat pull request baru, thx.

Bisakah kita memodifikasinya sesuai kebutuhan?

Saya tidak tahu, tetapi jika kita tidak bisa, itu sepertinya batasan yang parah. Ini bukan pertama kalinya pembaruan tambalan dalam paket @types menyebabkan masalah besar.

@DanielRosenwasser @sandersn Tahukah Anda apakah @types/express dapat menentukan versi minimum @types/express-serve-static-core ?

itu bekerja untuk saya yarn remove express-serve-static-core

Kesalahan ini masih ada dan saya mendapatkannya untuk ^4.17.0 juga.

Menemukannya.
Masalahnya adalah dengan file kunci. Anda hanya perlu menghapus baris yang merujuk express-serve-static-file dan meluncurkan kembali yarn atau npm i .

Dalam file yarn.lock , inilah yang saya miliki setelah @types/express meningkatkan ke 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" "*"

Anda dapat melihat ketidakcocokan versi.
Jadi saya menghapus blok pertama, yarn lagi, dan inilah yang saya miliki sekarang:

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

Tidak ada lagi ketidakcocokan, dan tidak ada lagi kesalahan.

Saya membuatnya berfungsi setelah menjalankan yarn remove pada semua jenis terkait ekspres (termasuk express-jwt) dan menambahkannya kembali setelahnya.

Saya memecahkan masalah ini dengan benang dengan melakukan:

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

Semoga harimu menyenangkan!

Bagi saya, itu adalah express-serve-static-core yang menyebabkan masalah, diperbarui ke versi terbaru dari express dan @types/express, menghapus express-serve-static-core && @types/express-serve-static-core, dan bekerja untuk saya.

Pada awalnya, saya pikir itu karena body-parser, tapi Tidak.

Untuk kode Windows, npm dan VS dengan akuisisi tipe otomatis, saya memperbaikinya dengan membuka %localappdata%\Microsoft\TypeScript\ , masuk ke folder versi terbaru, misalnya: 3.9 dan jalankan npm install @types/express-serve-static-core

Saya tidak yakin mengapa @types/express-serve-static-core tidak diinstal di sana untuk mesin utama saya yang telah menggunakan TypeScript cukup lama. Tapi untuk mesin baru saya yang lain, sudah terpasang di sana.

Memperbarui:
Saya pikir menjalankan npm update sana juga berfungsi.

ini masih masalah di tahun 2020. Maksud saya ada banyak hal yang salah di tahun 2020 tapi ini sudah bertahan sejak 2017 seperti ayolah guys

@xtianus79 TBH, koa dan fastify adalah pilihan kerangka kerja yang jauh lebih baik pada tahun 2020. Express berjalan dengan baik, tetapi sekarang ini jelas merupakan lib warisan.

Jawabannya bagi saya adalah menginstal @types/express-serve-static-core secara eksplisit selain @types/express .

Dari package.json :

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

Saya menerima kesalahan berikut saat memutakhirkan @types/express dari "4.17.2" ke "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.

Saya menelepon yarn why @types/express-serve-static-core dan memeriksa versi mana yang saya miliki:

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

Menjalankan yarn upgrade --latest dalam proyek saya membantu karena itu memperbarui versi dasar "@types/express-serve-static-core" di yarn.lock .

Ini masih menjadi masalah, menginstal tipe express/express-serve-static-core terbaru. Masalahnya adalah ketika memperluas antarmuka Permintaan.

interface ExampleRequest extends Request {
  example: any
}
// No overload matches this call...
router.use('/api', async function (req:ExampleRequest, res, next) { ... }
Apakah halaman ini membantu?
0 / 5 - 0 peringkat