我正在使用以下代码文件node_modules/@types/webrtc/index.d.ts不是模块:
import * as webrtc from "webrtc";
const peerConnection1 = new RTCPeerConnection();
我使用npm i @types/webrtc --save-dev
安装了这些输入法。将鼠标悬停在RTCPeerConnection
的{{1}}中,在Visual Studio代码中显示类型注释,这样至少代码编辑器会看到类型。正在运行const peerConnection1 = new RTCPeerConnection();
(或tsc
与webpack
)失败并显示错误。
我尝试ts-loader
试图解决这个错误的尝试,但它没有改变任何东西,我真的只想要打字,WebRTC就在浏览器中,我不需要一个包那。 (支持一边。)
npm i webrtc --save
文件确实不是一个模块,它只引用其中包含接口的其他两个文件。所以我想删除index.d.ts
希望import * as webrtc from "webrtc";
以某种方式仍然可以看到这些打字。 (但这是不可能的,因为我在TypeScript配置文件中排除tsc
。)当我这样做时node_modules
不再被识别。
添加RTCPeerConnection
没有帮助,/// <reference src="node_modules/@types/webrtc/" />
说无效的参考指令语法。
您可以使用最少的repro here on GitLab查看存储库。我不太熟悉TypeScript打字收购,所以请原谅我的无知,如果我发现这一切都错了。
答案 0 :(得分:39)
webrtc是浏览器的一部分;你正试图导入一个模块。只需导入(打字)库:
import "webrtc";
您可能需要在编译器选项中使用"moduleResolution": "node"
。
或者使用"types": ["webrtc"]
编译器选项,编译器会自动为您加载这些类型。
答案 1 :(得分:9)
您可能想要添加
"types": ["webrtc"]
到tsconfig.json
,或者更不用说
/// <reference types="webrtc" />
在源文件中。以下是tsconfig.json
中的一个示例:
{
"compilerOptions": {
"target": "es5",
"sourceMap": true,
"noImplicitAny": true,
"types": ["webrtc"]
},
"exclude": [
"node_modules"
]
}
这告诉TypeScript它应该在你的构建
中包含webrtc
声明
答案 2 :(得分:3)
无需导入任何内容,请执行以下操作:
npm install --save @types/webrtc
更新tsconfig.json -
“类型”:[ “@类型/的WebRTC” ]
答案 3 :(得分:1)
另一种选择是在你的模块中添加一个新的声明文件*.d.ts
,即:
declare module 'my-module';
答案 4 :(得分:0)
/// <reference types="@types/<your_types_module>" />
您可能会或可能不想这样做,具体取决于您的构建和样式需求,但这似乎是快速(和脏)修复。
答案 5 :(得分:0)
使用要求
const webRtc = require('webrtc');
你导入应该没问题
答案 6 :(得分:0)
就我而言,它是一个损坏的依赖项,删除模块后 npm install
完成了工作。
答案 7 :(得分:0)
就我而言,我收到此错误消息,其中包含一个由 TypeScript 编译器生成的 index.d.ts
文件。
问题是我忘记在源 import
文件中指定任何 export
或 .ts
声明。从 module.export = {…}
移植到 .js
时,我删除了原来的 .ts
位,但尚未替换。
这就是 the docs 定义“模块”的方式(强调):
<块引用>在 TypeScript 中,就像在 ECMAScript 2015 中一样,任何包含顶级导入或导出的文件都被视为一个模块。相反,没有任何顶级导入或导出声明的文件被视为脚本,其内容在全局范围内可用(因此也对模块可用)。
向我打算导出的内容添加 export
将 index.d.ts
变成了一个模块,从而清除了错误。