【问题标题】:TypeScript typings give me "index.d.ts is not a module"TypeScript 打字给我“index.d.ts 不是模块”
【发布时间】:2017-03-19 09:13:13
【问题描述】:

我得到 File node_modules/@types/webrtc/index.d.ts is not a module 使用此代码:

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

我已经使用npm i @types/webrtc --save-dev 安装了类型。将鼠标悬停在 const peerConnection1 = new RTCPeerConnection(); 中的 RTCPeerConnection 上会在 Visual Studio Code 中显示类型注释,因此至少代码编辑器可以看到这些类型。运行 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 表示引用指令语法无效

您可以查看具有最少复制here on GitLab 的存储库。我对 TypeScript 类型的获取不太精通,所以如果我做错了,请原谅我的无知。

【问题讨论】:

    标签: typescript typescript-typings


    【解决方案1】:

    在 vscode 中

    Ctrl + p > 开发者:重新加载窗口

    【讨论】:

      【解决方案2】:

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

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

      这就是the docs 定义“模块”的方式(已添加重点):

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 不幸的是,有时这可能是一个解决方案
        【解决方案4】:

        使用要求

        const webRtc = require('webrtc');
        

        你导入应该很好去

        【讨论】:

          【解决方案5】:

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

          您可能希望也可能不希望这样做,具体取决于您的构建和样式需求,但这似乎是快速(且肮脏)的解决方法。

          【讨论】:

            【解决方案6】:

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

            declare module 'my-module';
            

            【讨论】:

              【解决方案7】:

              不需要导入任何东西,运行以下:

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

                “类型”:[ “@types/webrtc” ]

              【讨论】:

              • 这将使得只导入 webrtc 类型。不要更新 tsconfig.json。
              • npm install --save-dev @types/... 是首选 - 通常,TS 不用于生产
              【解决方案8】:

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

              import "webrtc";
              

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

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

              【讨论】:

                【解决方案9】:

                你可能想添加

                "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 不加载任何其他类型,即使对于我的本地应用程序模块,它现在也会吐出数千个关于缺少类型的错误...
                猜你喜欢
                • 2020-02-23
                • 2018-12-07
                • 2016-11-10
                • 2020-01-18
                • 2017-01-09
                • 2022-12-16
                • 2017-10-13
                • 2019-04-18
                • 2017-02-07
                相关资源
                最近更新 更多