2016-11-05 82 views
8

我得到文件node_modules/@types/webrtc/index.d.ts是不是一個模塊與此代碼:打字稿分型給我「index.d.ts是不是一個模塊」

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

我已經使用npm i @types/webrtc --save-dev安裝了打字。懸停在RTCPeerConnectionconst peerConnection1 = new RTCPeerConnection();顯示在Visual Studio代碼中的註釋類型,至少代碼編輯器會看到類型。運行tsc(或webpackts-loader)失敗並顯示錯誤。

我試圖用npm i webrtc --save來解決這個錯誤的嘗試,但它沒有改變任何東西,我真的只想要類型,WebRTC就在瀏覽器中,我不需要一個包。 (支持在一邊)

index.d.ts文件確實不是一個模塊,它只是引用其他兩個接口的文件。所以我想刪除import * as webrtc from "webrtc";希望類型仍然可以通過tsc可見。 (但這是不可能的,因爲我在TypeScript配置文件中排除了node_modules。)當我這樣做時RTCPeerConnection不再被識別。

添加/// <reference src="node_modules/@types/webrtc/" />沒有幫助,tsc無效的引用指令語法

您可以使用最少的repro查看存儲庫here on GitLab。我對TypeScript的打字習得不太熟悉,所以請原諒我的無知,如果我對這一切都錯了。

回答

18

webrtc是瀏覽器的一部分;你正試圖導入一個模塊。簡單地導入(分型)庫:

import "webrtc"; 

,你可能需要在編譯器選項使用"moduleResolution": "node"

或者使用"types": ["webrtc"]編譯器選項,編譯器會自動爲您加載這些類型。

5

你可能想

"types": ["webrtc"] 

添加到您的tsconfig.json,或preferrably少,使用

/// <reference types="webrtc" /> 
在源文件中

。下面是它在你的tsconfig.json一個例子:

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

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

這告訴打字稿它應該包括webrtc聲明在構建

0

無需輸入任何東西,運行以下:

  1. npm install --save @types/webrtc
  2. 更新tsconfig。JSON -

    「類型」: 「@類型/的WebRTC」 ]

0

另一種方法是添加新的聲明文件*.d.ts你的模塊中,即:

declare module 'my-module'; 
0

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

你可能會也可能不想這樣做,這取決於你的構建和風格的需求,但這似乎是快速(和目錄ty)修復。