it-swarm.com.de

So importieren Sie eine js-Bibliothek ohne Definitionsdatei in eine TypeScript-Datei

Ich möchte von JavaScript zu TypeScript wechseln, um bei der Codeverwaltung zu helfen, wenn unser Projekt größer wird. Wir verwenden jedoch viele Bibliotheken als AMD-Module, die wir nicht in TypeScript konvertieren möchten.

Wir möchten sie weiterhin in TypeScript-Dateien importieren, aber wir möchten auch keine Definitionsdateien generieren. Wie können wir das erreichen?

z.B. Die neue TypeScript-Datei:

/// <reference path="../../../../definetelyTyped/jquery.d.ts" />
/// <reference path="../../../../definetelyTyped/require.d.ts" />
import $ = require('jquery');
import alert = require('lib/errorInfoHandler');

Hier, lib/errorInfoHandler ist ein AMD-Modul, das in einer riesigen JavaScript-Bibliothek enthalten ist, die wir nicht berühren möchten.

Die Verwendung des obigen Codes führt zu folgenden Fehlern:

Unable to resolve external module ''lib/errorInfoHandler'' 
Module cannot be aliased to a non-module type.

Dies sollte eigentlich den folgenden Code erzeugen:

define(["require", "exports", "jquery", "lib/errorInfoHandler"], function(require, exports, $, alert) {
...

}

Gibt es eine Möglichkeit, eine JavaScript-Bibliothek als AMD-Modul in TypeScript zu importieren und in der TypeScript-Datei zu verwenden, ohne eine Definitionsdatei zu erstellen?

59
tune2fs

Eine Kombination der 2 hier gegebenen Antworten hat für mich funktioniert.

//errorInfoHandler.d.ts
declare module "lib/errorInfoHandler" {
   var noTypeInfoYet: any; // any var name here really
   export = noTypeInfoYet;
}

Ich bin noch neu in TypeScript, aber es sieht so aus, als wäre dies nur eine Möglichkeit, TypeScript anzuweisen, mit dem Exportieren einer Dummy-Variablen ohne Typinformationen aufzuhören.

BEARBEITEN

In den Kommentaren zu dieser Antwort wurde darauf hingewiesen, dass Sie dasselbe Ergebnis erzielen können, indem Sie einfach Folgendes deklarieren:

//errorInfoHandler.d.ts
declare module "*";

Siehe den Github-Kommentar hier .

24
Code Novitiate

Erstellen Sie entweder Ihre eigene Definitionsdatei mit folgendem Inhalt:

declare module "lib/errorInfoHandler" {}

Und verweisen Sie auf diese Datei, in der Sie den Import verwenden möchten.

Oder fügen Sie die folgende Zeile oben in Ihre Datei ein:

/// <AMD-dependency path="lib/errorInfoHandler">

Hinweis: Ich weiß nicht, ob letzteres noch funktioniert. So habe ich anfangs mit fehlenden AMD-Abhängigkeiten gearbeitet. Bitte beachten Sie auch, dass Sie bei diesem Ansatz nicht über IntelliSense für diese Datei verfügen.

4
thomaux

Erstellen Sie eine Datei in lib mit dem Namen errorInfoHandler.d.ts. Schreiben Sie dort:

var noTypeInfoYet: any; // any var name here really
export = noTypeInfoYet;

Nun ist der alert -Import erfolgreich und hat den Typ any.

1
Ryan Cavanaugh