2

在 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”的正确链接?

谢谢!

4

2 回答 2

1

我找到了一个解决方法,并认为我会发布以防它对任何人有帮助,尽管我仍然对原始问题中提出的设置有困难,即获取以下类型的语句:

import foo = require('foo')

在客户端运行。这些在服务器上的 node.js 中为我工作,但在客户端上,对于通过脚本标签加载的第三方库,我无法让它工作,即使我将映射条目添加到 system.js 配置文件,无论我指向 .js 文件还是 d.ts 文件。

无论如何,如果您使用脚本标签加载库,那么在您的 IDE 中将参考路径放在客户端代码的顶部

/// <reference path="foo.d.ts" />

并确保您的 d.ts 文件不声明模块/命名空间,而是直接导出方法等。这让 IDE 可以毫无怨言地编译,并且客户端代码能够访问第三方库。

但是,我不确定做我所做的事情是否更可取/最佳实践,或者是否应该以某种方式配置 System.js。

于 2016-01-20T16:58:33.830 回答
0

类型是 js 库的空定义,不是用类型语言编写的。它们仅在 IDE 提示和内容的开发中有用,在您的应用程序中,您仍将像往常一样使用该库,在 index.html 中添加 js 文件或从其中加载 js 文件。

于 2016-01-15T06:34:09.507 回答