2016-11-05 84 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)修复。