在Node.js / Express / Angular2 / typescript(IDE = Visual Studio)应用程序的上下文中,我试图将第三方.js实用程序(packery)加载到客户端(用于指令) 。有人为它做了打字稿定义。 d.ts文件如下所示:
declare module "packery" {
interface PackeryOptions { stuff... }
class Packery { stuff .... }
export = Packery;
}
我引用这个d.ts文件,告诉浏览器.js包装脚本所在的位置,然后导入模块:
import Packery = require('packery');
此编译无怨言。但是,在运行时,浏览器尝试(并且失败)在http://localhost/packery处找到“packery”,而不是知道packery是导入的库。这与我在客户端上发表的其他导入语句形成对比,例如:
import {Http, HTTP_PROVIDERS} from 'angular2/http';
哪个工作 - 据我所知,我给它的那两个信息只有d.ts文件和.js文件的位置,就像packery一样。但是,我必须遗漏一些东西。尝试了许多文件位置和链接的组合,但无法使其工作。如何才能正确链接到“packery”?
谢谢!
答案 0 :(得分:1)
我找到了一个解决方法,并且认为我发布以防万一它可以帮助任何人,虽然我仍然在原始问题中提出的设置有困难,也就是说,获取类型的语句:
import foo = require('foo')
在CLIENT端运行。这些在我的服务器上的node.js中工作,但在客户端,对于通过脚本标记加载的第三方库,我无法使它工作,即使我将映射条目添加到system.js配置文件,无论我指向.js文件还是d.ts文件。
无论如何,如果使用脚本标记加载库,那么工作是什么,然后在IDE中在CLIENT端代码的顶部放置一个引用路径
/// <reference path="foo.d.ts" />
并确保您的d.ts文件不会声明模块/命名空间,而是直接导出方法等。这使IDE可以无需投诉进行编译,客户端代码可以访问第三方库。
但是,我不确定做我做的事情或者是否应该以某种方式配置System.js是优选/最佳做法。
答案 1 :(得分:0)
键入是js库的空定义,不是用类型语言编写的。它们仅适用于IDE提示和内容的开发,在您的应用程序中,您仍将像往常一样使用库,在index.html中添加js文件或者无需从中加载js文件。