web-dev-qa-db-ja.com

npmが提供する型を除外/上書きする

私はひどく書かれた古いタイプのnpmパッケージを持っています。私は自分のタイピングを作成しましたが、npmパッケージから元のタイピングをどうにかして除外できるかどうか疑問に思っています。これはインターフェースの単純な拡張ではなく、オリジナルは基本的にこの時点ではゴミです。

Tsconfig.jsonの除外リストを使用しても、もちろんこの目的では機能しません。そのフォルダーを除外しても、node_modulesからファイルがロードされるためです。

21
Simon Meskens

TsConfigのパスオプションで目的の動作を取得できます。次のようになります。

{
    "compilerOptions": {
       ...
        "paths": {
            "*": [
                "src/*",
                "declarations/*"
            ]
        }
    },
    ...
}

この構成では、TypeScriptはsrc(すべてのアプリソースがあるはずです)と宣言でモジュールを検索します。宣言フォルダーでは、通常、追加の必要な宣言を配置します。

ノードモジュールのタイプをオーバーライドするには、2つのオプションがあります。

  1. 入力用のindex.d.tsというファイルを含む、宣言フォルダー内にモジュールのような名前のフォルダーを配置します

  2. モジュールのような名前の宣言ファイルを宣言フォルダー内に配置します

実用的な例として、このリポジトリをご覧ください https://github.com/kaoDev/react-ts-sample

Bernhard Koenig による重要なヒント:

パスの順序は重要です。オーバーライドが最初に取得されるように、オーバーライドを含むパスを元の型定義を含むパスの前に置く必要がありました。 – Bernhard Koenig

11
Kalle

作成node_modulesフォルダーをsrcの下に置き、上書きするモジュールの型をその中に置きます。

├── node_modules
│   └── ...
│
└── src
    ├── index.ts
    ├── ... your codes ...
    │
    └── node_modules
        └── <module-to-be-overwritten>
            └── index.d.ts

Tsconfig.jsonのcompilerOptionsを変更する必要はありません。

https://www.typescriptlang.org/docs/handbook/module-resolution.htmlTypeScriptがモジュールを解決する方法セクションを読みます。

19
aleung