javascript - Hur man importerar ett js-bibliotek utan definitionsfil i en typescript-fil
Jag vill byta från JavaScript till TypeScript för att hjälpa till med kodhantering när vårt projekt blir större. Vi använder dock många bibliotek som AMD-moduler, som vi inte vill konvertera till TypeScript.
Vi vill fortfarande importera dem i TypeScript-filer, men vi vill inte heller generera definitionsfiler. Hur kan vi uppnå det?
t.ex. Den nya Typescript-filen:
/// <reference path="../../../../definetelyTyped/jquery.d.ts" />
/// <reference path="../../../../definetelyTyped/require.d.ts" />
import $ = require('jquery');
import alert = require('lib/errorInfoHandler');
Här är lib/errorInfoHandler en AMD-modul som ingår i ett stort JavaScript-bibliotek som vi inte vill röra.
Att använda ovanstående kod ger följande fel:
Unable to resolve external module ''lib/errorInfoHandler''
Module cannot be aliased to a non-module type.
Detta bör faktiskt generera följande kod:
define(["require", "exports", "jquery", "lib/errorInfoHandler"], function(require, exports, $, alert) {
...
}
Finns det ett sätt att importera ett JavaScript-bibliotek i TypeScript som en AMD-modul och använda det i TypeScript-filen utan att skapa en definitionsfil?
Svar #1
En kombination av de två svaren som gavs här fungerade för mig.
//errorInfoHandler.d.ts
declare module "lib/errorInfoHandler" {
var noTypeInfoYet: any; // any var name here really
export = noTypeInfoYet;
}
Jag är fortfarande ny på TypeScript men det ser ut som om detta bara är ett sätt att tala om för TypeScript att låta bli genom att exportera en dummyvariabel utan typinformation på den.
REDIGERA
Det har noterats i kommentarerna till detta svar att du kan uppnå samma resultat genom att helt enkelt deklarera:
//errorInfoHandler.d.ts
declare module "*";
Se GitHub-kommentaren här.
Svar #2
Skapa antingen din egen definitionsfil med följande innehåll:
declare module "lib/errorInfoHandler" {}
Och referera till den här filen där du vill använda importen.
Eller lägg till följande rad högst upp i din fil:
/// <amd-dependency path="lib/errorInfoHandler">
Observera: Jag vet inte om det senare fortfarande fungerar, det är hur jag ursprungligen arbetade med saknade AMD-beroenden. Observera också att med detta tillvägagångssätt kommer du inte att ha IntelliSense för den filen.
