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

时间:2016-11-05 17:37:33

标签: typescript typescript-typings

我正在使用以下代码文件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();(或tscwebpack)失败并显示错误。

我尝试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打字收购,所以请原谅我的无知,如果我发现这一切都错了。

8 个答案:

答案 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)

无需导入任何内容,请执行以下操作:

  1. npm install --save @types/webrtc
  2. 更新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 中一样,任何包含顶级导入或导出的文件都被视为一个模块。相反,没有任何顶级导入或导出声明的文件被视为脚本,其内容在全局范围内可用(因此也对模块可用)。

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