1. ホーム
  2. node.js

[解決済み] カスタムTypeScript定義ファイル作成時に「Module 'name' resolves to an untyped module at...」というエラーが発生する。

2022-09-22 21:25:58

質問

TypeScriptの定義がわかりません。 @type/{name} が見つからないので、インストールしたNodeJSパッケージの一つに対して d.ts ファイルを作成し、そのファイルを {project root}\typings フォルダーに保存します。これが私のやり方です。

// My source code: index.ts
import Helper from 'node-helper-lib';


// My definition: \typings\node-helper-lib.d.ts
declare....(something else)

declare module 'node-helper-lib' {
   class Helper { ... }
   export = Helper;
}

しかし、Visual Studio Codeはこのエラーを出し続け、赤線が declare module 'node-helper-lib' :

<ブロッククオート

[ts] 拡張のモジュール名が無効です。モジュール'node-helper-lib' は'{project}{path}で型付けされていないモジュールに解決されます。 path}node_modules}node-helper-lib}index.js' にある型付けされていないモジュールに解決されます。 に解決されます。

ライブラリが型付けされていないから、型付けを追加してもいいはずだ、というのは正論ではないでしょうか?

UPDATEしてください。

使っています。

  • TypeScript。2.1.4
  • Visual Studio コード。1.9.1
  • Node JS: 6.9.4
  • Windows 10 x64

どのように解決するのですか?

何度か試行錯誤の結果 augmentation は、他のモジュール宣言と同じファイル内でモジュールを宣言することを意味します。

したがって、もし私たちが 型付けされていない サードパーティのJavaScriptライブラリの定義ファイルを書きたい場合、1つだけ declare module 'lib-name' が必要で、'lib-name' はライブラリ名と正確に一致しなければなりません (package.json の "name" プロパティで見つけることができます)。

一方、サードパーティライブラリが がすでに定義ファイル .d.ts が含まれており、その機能を拡張したい場合は、作成した別のファイルに追加の定義を記述します。これは augmenting .

例えば

// These module declarations are in same file, given that each of them already has their own definition file.
declare module 'events' {
   // Extended functionality
}

declare module 'querystring' {
   // Extended functionality        
}

declare module '...' { ... }

誰かが同じ質問を持っている場合に備えて、私の発見をここに残しておきます。そして、私が何かを見逃しているならば、私を修正してください。