web-dev-qa-db-ja.com

TypeScriptタイピングにより、「index.d.tsはモジュールではありません」

私はファイルnode_modules/@types/webrtc/index.d.tsを取得していますが、このコードではモジュールではありません:

import * as webrtc from "webrtc";
const peerConnection1 = new RTCPeerConnection();

npm i @types/webrtc --save-devを使用してタイピングをインストールしました。 const peerConnection1 = new RTCPeerConnection();RTCPeerConnectionにカーソルを合わせると、Visual Studio Codeで型注釈が表示されるため、少なくともコードエディターは型を認識できます。 tsc(またはts-loaderを指定したwebpack)の実行はエラーで失敗します。

私はこれを解決するために間違った試みでnpm i webrtc --saveを試しましたが、それは何も変えませんでしたし、とにかくタイピングが本当に欲しいだけです、WebRTCはブラウザにすぐそこにあり、そのためのパッケージは必要ありません(サポートは別として。)

index.d.tsファイルは実際にはモジュールではなく、インターフェースを含む他の2つのファイルを参照するだけです。だから私はimport * as webrtc from "webrtc";を削除して、tscが何とかタイピングがまだ見えることを期待した。 (しかし、TypeScript構成ファイルでnode_modulesを除外しているので、それは不可能です。)それを行うと、RTCPeerConnectionが認識されなくなります。

/// <reference src="node_modules/@types/webrtc/" />を追加しても役に立たなかった、tsc無効な参照ディレクティブ構文と言います。

最小限の再現でリポジトリを表示できます ここではGitLabで 。私はTypeScriptのタイピングの習得にあまり詳しくないので、これがすべて間違っている場合は私の無知を許してください。

32

webrtcはブラウザーの一部です。モジュールをインポートしようとしています。 (タイピング)ライブラリをインポートするだけです:

import "webrtc";

コンパイラオプションで"moduleResolution": "node"を使用する必要がある場合があります。

または、"types": ["webrtc"]コンパイラオプションを使用すると、コンパイラはこれらのタイプを自動的にロードします。

43
Meirion Hughes

おそらく追加したい

"types": ["webrtc"]

tsconfig.jsonに、またはあまり好ましくないが、使用する

/// <reference types="webrtc" />

ソースファイル内。 tsconfig.jsonの例は次のとおりです。

{
    "compilerOptions": {
        "target": "es5",
        "sourceMap": true,
        "noImplicitAny": true,

        "types": ["webrtc"]
    },
    "exclude": [
        "node_modules"
    ]
}

これは、ビルドにwebrtc宣言を含める必要があることをTypeScriptに伝えます

9

何もインポートする必要はありません。次を実行します。

  1. npm install --save @types/webrtc
  2. tsconfig.jsonの更新-

    「タイプ」:["@ types/webrtc"]

4
Sabir Hussain

別のオプションは、新しい宣言ファイル*.d.tsをモジュールに追加することです。つまり:

declare module 'my-module';

/// <reference types="@types/<your_types_module>" />

ビルドとスタイルのニーズに応じて、これを実行する場合と実行しない場合がありますが、これは簡単な(そして汚い)修正のようです。

1
youngrrrr