如何在打字稿文件中导入没有定义文件的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
导入将成功,并且是any
types的。