web-dev-qa-db-fra.com

Les typages TypeScript me donnent "index.d.ts n'est pas un module"

Je reçois Le fichier node_modules/@types/webrtc/index.d.ts n'est pas un module avec le code suivant:

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

J'ai installé les typages en utilisant npm i @types/webrtc --save-dev. En survolant RTCPeerConnection dans const peerConnection1 = new RTCPeerConnection();, affichez les annotations de type dans Visual Studio Code afin qu'au moins l'éditeur de code voie les types. L'exécution de tsc (ou webpack avec ts-loader) Échoue avec l'erreur.

J'ai essayé npm i webrtc --save Dans une tentative malavisée de résoudre ce problème, mais cela n'a rien changé et je ne souhaite que les saisies de toute façon, WebRTC est exactement là dans le navigateur, je n'ai pas besoin d'un package pour cela. (Support de côté.)

Le fichier index.d.ts N’est en effet pas un module, il référence simplement deux autres fichiers avec des interfaces. J'ai donc pensé à supprimer import * as webrtc from "webrtc"; En espérant que les saisies seront toujours visibles par tsc d'une manière ou d'une autre. (Mais c'est impossible car j'exclus node_modules Dans le fichier de configuration TypeScript.) Quand je le fais, RTCPeerConnection n'est plus reconnu.

L'ajout de /// <reference src="node_modules/@types/webrtc/" /> N'a pas aidé, tsc indique Syntaxe de directive de référence non valide .

Vous pouvez visualiser un référentiel avec une repro minimale ici sur GitLab . Je ne suis pas trop au courant de l’acquisition de typages TypeScript, veuillez donc pardonner mon ignorance si je ne me plains pas du tout.

32

webrtc fait partie du navigateur; vous essayez d'importer un module. Importez simplement la bibliothèque (typings):

import "webrtc";

vous devrez peut-être utiliser "moduleResolution": "node" dans les options du compilateur.

Vous pouvez également utiliser le "types": ["webrtc"] option du compilateur et le compilateur chargera automatiquement ces types pour vous.

43
Meirion Hughes

Vous voulez probablement ajouter

"types": ["webrtc"]

à ton tsconfig.json ou, de manière moins préférable, à utiliser

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

dans vos fichiers source. En voici un exemple dans votre tsconfig.json:

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

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

Cela indique à TypeScript qu'il devrait inclure les déclarations webrtc dans votre construction.

9

Pas besoin d'importer quoi que ce soit, lancez les actions suivantes:

  1. npm install --save @types/webrtc
  2. mettre à jour tsconfig.json -

    "types": ["@ types/webrtc"]

4
Sabir Hussain

Une autre option consiste à ajouter un nouveau fichier de déclaration *.d.ts dans votre module, à savoir:

declare module 'my-module';
2

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

Vous pouvez ou non vouloir le faire en fonction de vos besoins en matière de construction et de style, mais cela semble être la solution rapide (et sale).

1
youngrrrr