Saya mencoba naskah ketikan. Ini berfungsi dengan baik di panggung halo dunia. Saya sekarang mencoba menggunakan modul npm:
index.ts
=
import _ = require('lodash')
console.log(_.toUpper('Hello, world !'))
Ini tidak berhasil:
tsc index.ts
->Cannot find module 'lodash'. (2307)
node-ts index.js
->Cannot find module 'lodash'. (2307)
Melihat dokumentasi naskah ketikan dan di google tidak membantu. Pertanyaan S / O lainnya tidak terjawab (di sini dan di sini ) atau tidak terkait.
Elemen:
- naskah ketikan 1.8 terbaru
- Ya, lodash diinstal
npm i --save lodash
dan ada di sistem file saya (dicentang) - Saya juga melakukannya
typings i --save lodash
- varian
import * as _ from 'lodash'
atauconst _ = require('lodash')
tidak berfungsi juga - Saya mencoba mengubah opsi tsconfig.json seperti yang disarankan dalam jawaban lain
"moduleResolution": "node"
dan"module": "commonjs"
seperti yang disarankan dalam beberapa jawaban, masih tidak berfungsi
Bagaimana kita menggunakan paket npm di skrip ketikan ??
node.js
typescript
npm
tsc
Offirmo
sumber
sumber
///<reference path="../typings/lodash/lodash.d.ts"/>
Jawaban:
[EDIT] Terima kasih banyak atas jawaban ini! Namun, pada 2018, itu sudah usang. Pembaca, lihat jawaban lainnya.
Ada beberapa cara untuk mengimpor modul dari npm. Tetapi jika Anda tidak mendapatkan pengetikan,
tsc
akan selalu mengeluh bahwa ia tidak dapat menemukan modul yang Anda perlukan (bahkan jika transpiled js benar-benar berfungsi).Jika Anda memiliki pengetikan dan tidak menggunakan a
tsconfig.json
, gunakanreference
untuk mengimpor pengetikan:/// <reference path="path/to/typings/typings.d.ts" /> import * as _ from 'lodash`; console.log(_.toUpper('Hello, world !'))
Jika Anda menggunakan
tsconfig.json
file, pastikan untuk memasukkan file ketikan Anda (atau tidak dikecualikan, pilihan Anda), dan buat yangimport
serupa pada contoh sebelumnya.Dalam kasus ketika tidak ada pengetikan yang tersedia. Anda memiliki dua pilihan: tulis sendiri pada
.d.ts
file, atau abaikan pemeriksaan tipe untuk pustaka.Untuk sepenuhnya mengabaikan pemeriksaan tipe (ini bukan cara yang disarankan), impor pustaka pada variabel tipe
any
.const _: any = require('lodash'); console.log(_.toUpper('Hello, world !'))
tsc
akan mengeluh bahwarequire
tidak ada. Berikannode
pengetikan, ataudeclare
untuk membuang kesalahan.sumber
ts-node
selama indeks pengetikan direferensikan ditsconfig.json
[2018/12] Baru, terkini, jawaban atas pertanyaan yang saya ajukan pada tahun 2016 ini, yang masih memperlihatkan banyak aktivitas meski memiliki jawaban yang ketinggalan zaman.
Singkat cerita, TypeScript membutuhkan informasi tipe tentang kode paket Anda (alias " file deklarasi tipe " alias "typings") dan berhak memberi tahu Anda bahwa jika tidak, Anda akan kehilangan seluruh inti dari TypeScript. Ada beberapa solusi untuk menyediakan atau menyisih dari mereka, tercantum di sini dalam urutan praktik terbaik:
Solusi 0 : modul sudah menyediakan pengetikan. Jika package.json-nya berisi baris seperti ini:
"typings": "dist/index.d.ts",
itu sudah mendukung TypeScript. Kemungkinan besar tidak demikian jika Anda membaca halaman ini, jadi mari kita lanjutkan ...
Solusi 1 : Gunakan pengetikan kontribusi komunitas dari DefinitelyTyped . Untuk modul "foo", coba ini:
jika berhasil, jackpot! Anda sekarang memiliki pengetikan dan dapat menggunakan modul Anda. Jika npm mengeluh tidak dapat menemukan modul @ types / foo, mari lanjutkan ...
Solusi 2 : Berikan pengetikan khusus tentang modul ini. (dengan opsi untuk melakukan tanpa usaha)
"include": [ "./typings-custom/**/*.ts" ]
declare module 'foo'
Kode TypeScript Anda sekarang harus dikompilasi, meskipun dengan informasi jenis NO (TypeScript mempertimbangkan modul foo jenis "apapun").
Anda juga dapat mencoba menulis informasi jenis sendiri, melihat dokumen resmi dan / atau contoh dari DefinitelyTyped . Jika ya, pikirkan untuk menyumbangkan pengetikan Anda baik langsung ke dalam modul (solusi 0, jika pembuat modul menerimanya) atau ke DefinitelyTyped (solusi 1)
sumber
Reference the content of this folder in your tsconfig.json:
memberikan kesalahan berikut:Unknown compiler option 'include'.
compilerOptions
Anda mungkin kehilangan File Deklarasi .
Lihat DefinitelyTyped untuk info lebih lanjut.
Coba ini:
Sekarang Anda dapat mengimpor file.
import _ from 'lodash';
Jika modul yang Anda impor memiliki beberapa ekspor , Anda dapat melakukan ini:
import { Express, Router } from 'express';
Jika modul yang Anda impor "tidak memiliki ekspor default", Anda perlu melakukan ini:
import * as http from 'http';
sumber
* as _
dan tidak_ from 'lodash'
seperti pada kode ES6?import _ from 'lodash';
lebih baik dalam kasus ini. Saya telah memperbarui jawaban saya untuk menunjukkan berbagai cara mengimpor dan mengapa Anda akan menggunakannya.* as _
diperlukan jika modul tidak memiliki ekspor default. Kompilator tsc akan memperingatkan ini.export default <...>
pernyataan. Lihatlah bagian "Ekspor default" dari Dokumentasi Modul Ketik .Itu berhasil untuk saya.
Di folder typings, buat nama file module-name.d.ts . Itu mengandung:
declare module "module-name";
Di tsconfig.json, lihat foldernya
"typeRoots": [ "./typings", "../node_modules/@types" ]
sumber
In tsconfig.json, refer to the folder
:, memberikan kesalahan berikut:Unknown compiler option 'typesRoots'.
Saya telah mendapatkan kesalahan ini dan tidak ada jawaban yang berfungsi untuk saya tetapi saya menemukan sesuatu ketika Anda ingin bekerja dengan modul node dalam skrip, instal sebagai
$npm install @types/<module_name>
sebagai contoh
alih-alih mengatakan
sumber