ここでは、高品質の Typescript 宣言ファイルを作成する方法を学びます。 ReactJS でコーディングしていて、SVG ファイルをインポートしたいと考えていますが、IDE/tsc が文句を言っています。
[ts] cannot find module './logo.svg'
今こそ、Stackoverflow を使って簡単なコピーペーストの解決策を探しましょう。
しかし、ちょっと待って、これらのファイルとその機能を理解してみましょう。
TS/JS では、TS/JS で書かれたアプリをモジュール化するための多くのアプローチが行われてきました。現在、最高位に君臨しているのは ESM (別名 ES モジュール、ES6 モジュール) です。通常、私たちはそれらを構文で知っています:
元の質問に答えると、ECMAScript 2015 に準拠した TS/JS では、トップレベルインポートまたはエクスポートを含むファイルはすべてモジュールと見なされます。
トップレベルのインポートまたはエクスポートがない場合:
グローバルな名前空間汚染はもうありません。これは次のことを意味します:
TS モジュールの解決は、import または require ステートメントから文字列を取得し、その文字列がどのファイルを参照しているかを判断するプロセスです。
TS には 2 つの戦略があります:
ところで、意図的または非意図的に変更する可能性のある場所が山ほどあります (moduleResolution、baseUrl、paths、rootDirs)。
たとえば、ESM を利用するようにアプリを構築している場合 (コンパイルされたバージョンは ESM を使用しています)、compilerOptions.module で「NodeNext」を選択する必要があります。
注: そのディレクトリ内に package.json がある場合。次に、TS はその main と type を使用してその型を取得します。
詳細については、こちらをご覧ください。
基本的に、baseUrl が設定されている場合は相対的に、設定されている場合は tsconfig ファイルに対して相対的に、インポートをルックアップ場所*s* に再マッピングします。この最も一般的な使用例はパス エイリアスです:
[ts] cannot find module './logo.svg'
注意
これはランタイムにとっては何の意味もありません。つまり、あなたの親愛なるバンドラーまたはコンパイラーがそれらを正しくバンドルする必要があるということです。また、パスが存在しない場所を指している場合、NodeJS による実行時にアプリがクラッシュします。
ヒント
これの代わりに、package.json のインポート (別名サブパス インポート) を利用できます。
発行された JS 出力に影響を与えるには、以下を変更できます。
そこで、TS がどのようなものかをまったく知らない (タイプを解決できない) .graphql ファイルまたはその他の拡張子をインポートしたいと考えています。これで、TS はインポートされた svg、graphql、またはその他のファイルがどのように見えるかを認識できるようになりました。
参照
ベア指定子: 相対パスでも絶対パスでもないインポート ステートメント内のモジュール名。これらは通常、プロジェクトのnode_modulesまたはその他の構成された場所にあるパッケージの名前です。 ↩
以上がTS でのモジュール宣言の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。