如何在打字稿文件中导入没有定义文件的js库

我想从JavaScript切换到TypeScript,以帮助代码pipe理,因为我们的项目变得更大。 然而,我们使用了许多库,如amd Modules,我们不想将其转换为TypeScript。

我们仍然想将它们导入到TypeScript文件中,但是我们也不想生成定义文件。 我们怎样才能做到这一点?

例如新的Typescript文件:

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

在这里, lib/errorInfoHandler是一个巨大的JavaScript库中包含的amd模块,我们不想去碰它。

使用上面的代码会产生以下错误:

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

这实际上应该产生以下代码:

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

有没有办法将一个JavaScript库作为一个amd模块导入到TypeScript中,并在TypeScript文件中使用它,而无需创build定义文件?

这里给出的两个答案的组合为我工作。

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

我还是新来的TypeScript,但它看起来好像这只是一种方式告诉TypeScript离开,通过导出一个虚拟variables,没有types的信息。

编辑

在这个答案的评论中已经注意到,你可以通过简单地声明来获得相同的结果:

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

在这里看到github的评论。

您可以使用以下内容创build您自己的定义文件:

 declare module "lib/errorInfoHandler" {} 

并引用这个文件,你要使用导入。

或者将以下行添加到文件顶部:

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

注意:我不知道后者是否仍然有效,这是我最初如何使用缺lessAMD依赖关系的工作。 请注意,使用这种方法,您将不会有该文件的智能感知。

lib创build一个名为errorInfoHandler.d.ts的文件。 在那里,写:

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

现在alert导入将成功,并且是anytypes的。