ChatGPT解决这个技术问题 Extra ChatGPT

TypeScript 打字给我“index.d.ts 不是模块”

我得到 File node_modules/@types/webrtc/index.d.ts is not a module with this code:

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

我已经使用 npm i @types/webrtc --save-dev 安装了类型。在 Visual Studio Code 中将鼠标悬停在 const peerConnection1 = new RTCPeerConnection(); 中的 RTCPeerConnection 上,这样至少代码编辑器可以看到类型。运行 tsc(或带有 ts-loaderwebpack)失败并出现错误。

我已经尝试过 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引用指令语法无效

您可以查看具有最少重现 here on GitLab 的存储库。我不太精通 TypeScript 类型的获取,所以如果我要解决这一切都错了,请原谅我的无知。


M
Meirion Hughes

webrtc 是浏览器的一部分;您正在尝试导入模块。只需导入(打字)库:

import "webrtc";

您可能需要在编译器选项中使用 "moduleResolution": "node"

或者,使用 "types": ["webrtc"] 编译器选项,编译器会自动为您加载这些类型。


P
Pavindu

在 vscode 中

Ctrl + Shift + p > 开发人员:重新加载窗口


D
Daniel Rosenwasser

您可能想要添加

"types": ["webrtc"]

到您的 tsconfig.json,或者不太推荐使用

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

在您的源文件中。这是您的 tsconfig.json 中的一个示例:

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

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

这告诉 TypeScript 它应该在你的构建中包含 webrtc 声明


不要设置 types 否则只有那些类型会被加载 - 通常 node_modules/@types 中的所有内容都会被加载,这将阻止这种行为。这些天你只需要npm i @types/webrtc
@aendrew 这并不完全正确,因为它取决于您的 tsconfig.json 相对于 node_modules 目录的放置位置。
是的,这只是让 TS 不会加载任何其他类型,即使对于我的本地应用程序模块,它现在也会吐出数千个关于缺少类型的错误......
K
Karolis Grinkevičius

另一种选择是在您的模块中添加一个新的声明文件 *.d.ts,即:

declare module 'my-module';

S
Sabir Hussain

无需导入任何东西,运行以下命令:

npm install --save @types/webrtc update tsconfig.json - "types": [ "@types/webrtc" ]


这将使得只导入 webrtc 类型。不要更新 tsconfig.json。
npm install --save-dev @types/... 是首选 - 通常,TS 不用于生产
y
youngrrrr

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

根据您的构建和样式需求,您可能想要也可能不想这样做,但这似乎是快速(和肮脏)的修复。


R
Rajantha Fernando

在我的情况下,这是一个损坏的依赖项,删除模块并 npm install 完成了工作。


不幸的是,有时这可能是一个解决方案
a
andrewdotn

就我而言,我收到此错误消息,其中包含由 TypeScript 编译器生成的 index.d.ts 文件。

问题是我忘记在源 .ts 文件中指定任何 importexport 声明。从 .js 移植到 .ts 时,我删除了原来的 module.export = {…} 位,并且还没有替换它。

这就是 the docs 定义“模块”的方式(强调):

在 TypeScript 中,就像在 ECMAScript 2015 中一样,任何包含顶级导入或导出的文件都被视为一个模块。相反,没有任何顶级导入或导出声明的文件被视为其内容在全局范围内可用的脚本(因此也可用于模块)。

export 添加到我打算导出的内容中,将 index.d.ts 变成了一个模块,从而清除了错误。


I
Ion Scorobogaci

使用要求

const webRtc = require('webrtc');

你进口应该很好