私が何もせずに型定義を追加すると、jqueryで機能しますが、lodashは
'_'はUMDグローバルを参照しますが、現在のファイルはモジュールです。代わりにインポートを追加することを検討してください。
インポート呼び出しの任意の組み合わせでlodashをインポートしようとすると、
lodash.jsはモジュールではありません
こちら に質問してヘルプを取得しようとしましたが、 別の回答があったためクローズされました Angular(Angular 2)の場合。私は本当に本当の答えが必要なので、自分の解決策を再投稿します。誰かが最終的にこの問題を理解してくれることを期待しています。
この場合、私は:
問題を修正するために、グローバルタイピング定義ファイル(〜\ src\typings.d.ts)に次のコードを追加しました。 Angular CLI 1.7を使用しています
// lodash global typing - begin
declare namespace _ {
}
// lodash global typing - end
私が使う import * as _ from 'lodash';
lodashをインストールした後の作業ファイル。
他の答えはどれもうまくいきませんでした。ここで私はそれを解決した方法です。
このメソッドを使用すると、グローバルインクルードからlodashをロードできます
また、lodashをWebpackバンドルに組み込まなくても、非常に重要なタイプのヒントが得られます。
Lodashは、インポートする必要なく、すべてのtsファイルでグローバルにアクセスできるようになります
これが私の設定です。
[〜#〜] html [〜#〜]
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js" integrity="sha256-VeNaFBVDhoX3H+gJ37DpT/nTuZTdjYro9yBruHjVmoQ=" crossorigin="anonymous"></script>
</head>
[〜#〜] npm [〜#〜]
npm i @types/lodash lodash --save-dev
Webpack
externals: {
_: 'lodash'
}
global.d.ts
import _ from 'lodash';
declare global {
const _: typeof _;
}
tsconfig.json
"types": [
"lodash"
],
entry.ts
console.log(_.VERSION)
この方法は、バンドルのコンパイルにかかる時間を短縮します。ビルドサイズを小さくし、各ビルド後にクライアントへのダウンロードサイズを小さくして、クライアントが以前のビルド、他のページ、または他のサイトのメモリに既に持っている可能性があるCDNからキャッシュされたライブラリを使用できるようにします。
'_'はUMDグローバルを参照しますが、現在のファイルはモジュールです。代わりにインポートを追加することを検討してください。
これはタイプ定義が原因です。 @ types/lodashファイルに移動して、次の行を削除します。
export = _;
export as namespace _;
これでエラーが解決します。
***編集****
上記のエクスポートステートメントを削除すると、たとえば次のように、タイプ定義ファイルにグローバル宣言がある場合、別のエラーが発生します。
declare global { }
これを解決するには、プロパティをグローバル宣言からそれらを参照するインターフェイスに移動するか、プロパティを完全に削除して、参照のタイプを汎用的なものに変更します。どのソリューションがより良い最終的なコンパイルを行うかはわかりませんが、前者はアプリケーションにIE11までさかのぼって問題を引き起こしていません。