Saya mencoba untuk mendapatkan aplikasi TypeScript pertama saya dan DefinitelyTyped Node.js dan berjalan, dan mengalami beberapa kesalahan.
Saya mendapatkan kesalahan "TS2304: Tidak dapat menemukan nama 'memerlukan'" ketika saya mencoba untuk mentransformasikan halaman TypeScript Node.js sederhana. Saya telah membaca beberapa kejadian lain dari kesalahan ini pada Stack Overflow, dan saya tidak berpikir saya memiliki masalah yang sama. Saya menjalankan perintah shell prompt:
tsc movie.server.model.ts.
Isi file ini adalah:
'use strict';
/// <reference path="typings/tsd.d.ts" />
/* movie.server.model.ts - definition of movie schema */
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var foo = 'test';
Kesalahan dilemparkan di var mongoose=require('mongoose')
telepon.
Isi dari file typings / tsd.d.ts adalah:
/// <reference path="node/node.d.ts" />
/// <reference path="requirejs/require.d.ts" />
Referensi file .d.ts ditempatkan di folder yang sesuai dan ditambahkan ke typings / tsd.d.ts dengan perintah:
tsd install node --save
tsd install require --save
File .js yang diproduksi tampaknya berfungsi dengan baik, jadi saya bisa mengabaikan kesalahan. Tetapi saya akan menghargai mengetahui mengapa kesalahan ini terjadi dan apa yang saya lakukan salah.
sumber
when I attempt to transpile a simple ts node page
<Bagaimanaimport { mongoose } from 'mongoose'
?Jawaban:
Cepat dan kotor
Jika Anda hanya perlu menggunakan satu file, atau Anda melakukan ini untuk tujuan demo, Anda dapat menentukan persyaratan di bagian atas file TypeScript Anda.
TypeScript 2.x
Jika Anda menggunakan TypeScript 2.x, Anda tidak perlu lagi menginstal Typings atau Definently Typed. Cukup instal paket berikut.
The Future of Declaration Files (15/06/2016)
Verifikasi atau Edit src Anda /tsconfig.app.json Anda sehingga mengandung yang berikut ini:
Pastikan file dalam folder src dan tidak ada pada folder aplikasi root.
Secara default, paket apa pun di @types sudah termasuk dalam build Anda kecuali Anda Anda telah menentukan salah satu dari opsi ini. Baca lebih banyak
TypeScript 1.x
Menggunakan pengetikan (pengganti DefinitelyTyped), Anda dapat menentukan definisi langsung dari repositori GitHub.
Instal pengetikan
Instal definisi jenis requireJS dari repo DefinitelyType
Paket web
Jika Anda menggunakan Webpack sebagai alat bangun Anda, Anda dapat menyertakan jenis Webpack.
npm instal --save-dev @ types / webpack-env
Perbarui Anda
tsconfig.json
dengan yang berikut ini di bawahcompilerOptions
:Ini memungkinkan Anda untuk melakukan
require.ensure
dan fungsi spesifik Webpack lainnya.CLI sudut
Dengan CLI Anda dapat mengikuti langkah Webpack di atas dan menambahkan blok "types" ke
tsconfig.app.json
.Atau, Anda dapat menggunakan
node
jenis yang sudah diinstal sebelumnya . Ingatlah, ini akan mencakup tipe tambahan untuk kode sisi klien Anda yang tidak benar-benar tersedia.sumber
Unable to find "require" ("npm") in the registry
. Apakah memerlukan bagian dari serangkaian besar pengetikan nodeJS?require
. mungkin jawaban yang tepat untuk beberapa variasi target output ES5 tetapi tidak pada kasus umum.@types/node
adalah definisi TypeScript. Node tidak termasuk ini, juga tidak seharusnya.Untuk TypeScript 2.x , sekarang ada dua langkah:
Instal paket yang mendefinisikan
require
. Sebagai contoh:Beri tahu TypeScript untuk memasukkannya secara global di
tsconfig.json
:Langkah kedua hanya penting jika Anda memerlukan akses ke fungsi yang tersedia secara global seperti
require
. Untuk sebagian besar paket, Anda harus menggunakanimport package from 'package'
pola. Tidak perlu menyertakan setiap paket dalam larik jenis tsconfig.json di atas.sumber
"types": ["jasmine", "hammerjs"]
untuktsconfig.js
saya hade untuk menambahkannode
juga. Terima kasih Jordan.import express from "express";
sekarang memberitahu saya bahwa saya perlu mencoba menginstal @ types / express atau menambahkan file .d.ts untuk itu.@types/...
dari sekedar@types/node
folder tidak menambahkan"types": ["node"]
ditsconfig.json
karena naskah compiller akan menghilangkan paket tidak disebutkan lainnya. Ini akan memecah penyelesaian jenis IDE Anda. Itu ditulis di sini typescriptlang.org/docs/handbook/…Kamu bisa
Atau, untuk dukungan yang lebih komprehensif, gunakan DefinitelyTyped's require.d.ts
Selain itu,
var mongoose = require('mongoose')
Anda dapat mencoba yang berikut inisumber
use strict
dalam TypeScript: jawaban basarat dan "Gunakan Ketat" diperlukan dalam file TypeScript? . Itu perlu untuk digunakanuse strict
dalam TypeScript."use strict"
, saya akan mengedit jawaban sayaJawaban ini berkaitan dengan pengaturan modern (TypeScript 2.x, Webpack > 2.x)
Anda tidak perlu menginstal @ types / node (yang merupakan semua jenis Node.js dan tidak relevan untuk kode front-end, sebenarnya menyulitkan hal-hal seperti setTimout nilai pengembalian yang berbeda, dll.
Anda lakukan perlu menginstal @ jenis / Webpack-env
npm i -D @types/webpack-env
yang memberikan tanda tangan runtime yang Webpack memiliki (termasuk
require
,require.ensure
, dll)Juga pastikan bahwa file tsconfig.json Anda tidak memiliki set 'types' array -> yang akan membuatnya mengambil semua definisi tipe dalam folder node_modules / @ types Anda.
Jika Anda ingin membatasi pencarian jenis, Anda dapat mengatur properti typeRoot ke node_modules / @ types.
sumber
Dari pada:
Mencoba:
yaitu jalur referensi pertama.
sumber
Dalam kasus saya, itu adalah masalah yang sangat bodoh, di mana pengaturannya
src/tsconfig.app.json
ditimpatsconfig.json
.Jadi, saya punya ini di
tsconfig.json
:Dan yang ini di
src/tsconfig.app.json
:Saya harap seseorang menemukan ini bermanfaat, karena kesalahan ini menyebabkan saya uban.
sumber
Hanya untuk referensi, saya menggunakan Angular 7.1.4 , TypeScript 3.1.6 , dan satu-satunya hal yang perlu saya lakukan adalah menambahkan baris ini di
tsconfig.json
:sumber
npm i @types/node
lalu tambahkannode
ke bidang jenis di tsconfig Anda. - apakah npm menginstal.Saya menemukan solusinya adalah dengan menggunakan perintah TSD:
Yang menambah / memperbarui
typings/tsd.d.ts
file dan file itu berisi semua definisi tipe yang diperlukan untuk aplikasi simpul.Di bagian atas file saya, saya menaruh referensi
tsd.d.ts
seperti ini:Persyaratan didefinisikan seperti ini per Januari 2016:
sumber
Saya mengambil jawaban Peter Varga untuk ditambahkan
declare var require: any;
dan membuatnya menjadi solusi umum yang bekerja untuk semua file .ts secara umum dengan menggunakan preprocess-loader :pasang preprocessor-loader:
tambahkan loader ke webpack.config.js Anda (saya menggunakan ts-loader untuk memproses sumber TypeScript):
Anda dapat menambahkan yang lebih kuat membutuhkan.d.ts dengan cara yang sama, tetapi
declare var require: any;
cukup dalam situasi saya.Catatan, ada bug di preprocessor 1.0.5 , yang memotong baris terakhir, jadi pastikan Anda memiliki ruang garis tambahan kembali di akhir dan Anda akan baik-baik saja.
sumber
Saya telah berjuang dari masalah ini juga. Saya percaya bahwa ini berfungsi untuk semua kandidat rilis alias rc tetapi saya tidak mengetesnya. Untuk @ segitiga rc.2 berfungsi dengan baik.
core-js
sebagai ketergantungan npm dipackage.json
typings install core-js --save
"es6-shim"
kejadian di blog Andapackage.json
. Anda tidak membutuhkannya lagi.Bersulang!
sumber
Pastikan Anda sudah menginstal
npm i @types/node
sumber
impor * sebagai luwak dari 'luwak'
sumber
Kadang "melati" yang hilang dari tsconfig.json dapat menyebabkan kesalahan ini. (TypeScript 2.X)
Jadi, tambahkan
ke
tsconfig.json
file Anda .sumber
Penambahan Electron + Angular 2/4:
Selain menambahkan tipe 'simpul' ke berbagai file ts.config, yang akhirnya berhasil bagi saya adalah menambahkan yang berikutnya ke
typings.d.ts
file:Perhatikan bahwa kasus saya berkembang dengan Elektron + Angular 2/4. Saya membutuhkan persyaratan di jendela global.
sumber
Bagi saya itu diselesaikan dengan menambahkan jenis ke opsi kompiler sudut.
sumber
Apakah Anda menentukan modul apa yang digunakan untuk mengubah kode?
tsc --target es5 --module commonjs script.ts
Anda harus melakukan itu untuk memberi tahu transpiler bahwa Anda sedang mengkompilasi kode NodeJS. Documents .
Anda harus menginstal definisi luwak juga
tsd install mongoose --save
Jangan gunakan
var
untuk mendeklarasikan variabel (kecuali perlu, yang merupakan kasus yang sangat langka), gunakanlet
saja. Pelajari lebih lanjut tentang itusumber
Selain jawaban cgatian , untuk TypeScript 1.x
Jika Anda masih melihat kesalahan, harap berikan index.d.ts secara khusus dalam opsi kompiler Anda.
sumber
Saya tidak bisa mendapatkan kesalahan 'wajib' untuk pergi dengan menggunakan salah satu trik di atas.
Tapi saya menemukan bahwa masalahnya adalah alat TypeScript saya untuk Visual Studio di mana versi lama (1.8.6.0) dan versi terbaru pada hari ini adalah (2.0.6.0).
Anda dapat mengunduh versi alat terbaru dari:
TypeScript untuk Visual Studio 2015
sumber
Jika Anda dapat mengkompilasi kode, tetapi Visual Studio 2015 menandai fungsi 'wajib' karena kesalahan dengan teks kesalahan tidak dapat menemukan nama 'perlu' atau tidak dapat menyelesaikan simbol 'perlu' wajib , perbarui TypeScript untuk Visual Studio 2015 ke versi terbaru (saat ini 2.1. 5) dan perbarui ReSharper (jika Anda menggunakannya) untuk setidaknya versi 2016.3.2.
Saya memiliki masalah yang mengganggu ini untuk sementara waktu dan tidak dapat menemukan solusi, tetapi saya akhirnya menyelesaikannya dengan cara ini.
sumber
Tambahkan yang berikut ini di
tsconfig.json
:sumber
Saya sudah jawaban lain yang dibangun di atas semua yang sebelumnya yang menjelaskan
npm install @types/node
dan termasuknode
dalamtsconfig.json / compilerOptions / types
.Dalam kasus saya, saya memiliki basis
tsConfig.json
dan basis terpisah dalam aplikasi Angular yang memperluas yang ini:Masalah saya adalah kosong
types
dalam hal initsconfi.app.json
- itu clobbers yang ada di konfigurasi dasar.sumber
Jika Anda menghadapi masalah ini dalam file .ts yang hanya ada untuk memberikan Anda beberapa nilai konstan, maka Anda bisa saja
dan kesalahan tidak akan datang lagi.
sumber