随着项目变得越来越大,我想从JavaScript切换到TypeScript以帮助进行代码管理 . 然而,我们使用许多库作为amd模块,我们不想将其转换为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
是一个amd模块,包含在我们不想触及的巨大JavaScript库中 .
使用上面的代码会产生以下错误:
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文件中使用它而不制作定义文件?
3 回答
这里给出的2个答案的组合对我有用 .
我还是TypeScript的新手,但看起来这只是一种告诉TypeScript通过导出一个没有类型信息的虚拟变量而离开的方法 .
编辑
在这个答案的评论中已经注意到,通过简单地声明,您可以获得相同的结果:
请参阅github评论here .
使用以下内容创建您自己的定义文件:
并在您要使用导入的位置引用此文件 .
或者将以下行添加到文件顶部:
注意:我不知道后者是否仍然有效,这是我最初使用缺少的AMD依赖项的方式 . 另请注意,使用此方法,您将无法获得该文件的IntelliSense .
在
lib
中创建一个名为errorInfoHandler.d.ts
的文件 . 在那里写道:现在
alert
导入将成功并且类型为any
.