TypeScriptのショットを提供しています。 Hello Worldの段階では正常に機能します。私は現在npmモジュールを使用しようとしています:
index.ts
=
import _ = require('lodash')
console.log(_.toUpper('Hello, world !'))
これは機能しません:
tsc index.ts
-> Cannot find module 'lodash'. (2307)
node-ts index.js
-> Cannot find module 'lodash'. (2307)
TypeScriptのドキュメントとGoogleを見ても助けにはなりませんでした。他のS/Oの質問は、未回答( here および here )または無関係です。
要素:
npm i --save lodash
にインストールされ、ファイルシステムに存在します(チェック済み)typings i --save lodash
をしましたimport * as _ from 'lodash'
またはconst _ = require('lodash')
も機能しません"moduleResolution": "node"
および"module": "commonjs"
で提案されているように調整してみましたTypeScriptでnpmパッケージをどのように消費しますか?
[2018/12] 2016年に尋ねたこの質問に対する新しい、最新の回答。古い回答があったにもかかわらず、多くの活動を示しています。
簡単に言えば、TypeScriptはtype informationsがパッケージのコードについて(別名 " type declare files " aka "typings")必要であり、そうでなければ全体を失うことになるのは当然ですTypeScriptのポイント。それらを提供またはオプトアウトするには、いくつかの解決策があります。ここに、ベストプラクティスの順に示します。
Solution:モジュールは既にタイピングを提供しています。 package.jsonにそのような行が含まれている場合:
"typings": "dist/index.d.ts",
typeScriptは既に有効になっています。このスタックオーバーフローページを読んでいる場合は、ほとんどの場合そうではないので、続けましょう...
Solution 1: DefinitelyTyped のコミュニティが提供するタイピングを使用します。モジュール "foo"の場合、これを試してください:
npm add -D @types/foo
うまくいけば、大当たり!これでタイピングが完了し、モジュールを使用できます。 npmが@ types/fooモジュールを見つけられないと不平を言ったら、続けましょう...
Solution 2:このモジュールに関するカスタムタイプを提供します。 (ゼロエフォートを行うオプション付き)
"include": [
"./typings-custom/**/*.ts"
]
declare module 'foo'
タイプ情報はありませんが、TypeScriptコードがコンパイルされるはずです(TypeScriptは「any」タイプのfooモジュールと見なします)。
また、 official doc および/または DefinitelyTyped の例を参照して、自分で型情報を記述しようとすることもできます。そうする場合、モジュールに直接入力するか(モジュール作成者が受け入れる場合はソリューション0)、またはDefinitelyTyped(ソリューション1)に入力することを検討してください。
[編集]この回答に感謝します!ただし、2018年の時点では時代遅れです。読者は他の回答をご覧ください。
Npmからモジュールをインポートする方法はいくつかあります。しかし、タイピングが得られない場合、tsc
は常に、必要なモジュールを見つけることができないと文句を言います(トランスコンパイルされたjs 実際に動作していても)。
タイピングがあり、tsconfig.json
を使用しない場合は、reference
を使用してタイピングをインポートします。
/// <reference path="path/to/typings/typings.d.ts" />
import * as _ from 'lodash`;
console.log(_.toUpper('Hello, world !'))
tsconfig.json
ファイルを使用している場合は、必ずタイピングファイルを含めて(または除外せずに選択)、前の例のようにimport
を作成してください。
利用可能なタイピングがない場合。 2つの選択肢があります:.d.ts
ファイルに独自のファイルを作成するか、ライブラリのタイプチェックを無視します。
型チェックを完全に無視するには(これは推奨される方法ではありません)、型any
の変数にライブラリをインポートします。
const _: any = require('lodash');
console.log(_.toUpper('Hello, world !'))
tsc
は、require
が存在しないと文句を言います。 node
を入力するか、declare
を入力してエラーを破棄します。
おそらく 宣言ファイル 。が欠落している
詳細については、 DefinitelyTyped を参照してください。
これを試して:
npm install --save lodash
npm install --save @types/lodash
これでインポートできます。
import _ from 'lodash';
インポートするモジュールに複数のエクスポートがある場合、これを行うことができます:
import { Express, Router } from 'express';
インポートするモジュール "デフォルトのエクスポートがない"の場合、これを行う必要があります。
import * as http from 'http';
それは私のために働いた。
タイピングフォルダーで、ファイル名module-name.d.tsを作成します。を含む:
declare module "module-name";
Tsconfig.jsonで、フォルダーを参照します
"typesRoots": [ "./typings", "../node_modules/@types" ]