如何为NPM模块声明环境命名空间?

时间:2016-08-12 21:14:15

标签: typescript

模块在这里:https://github.com/coatue/SlickGrid

它在环境中导出以下结构:

namespace Slick {
  class Grid {...}
  namespace Data {
    class DataView {...}
  }
}

所以我在repo的根目录中创建了一个文件typings.d.ts,其中包含:

declare namespace Slick {
  export class Grid {...}
  namespace Data {
    export class DataView {...}
  }
}

在repo的package.json中,我放了"typings": "./typings.d.ts"

然而,这似乎不起作用。

我希望消费项目中的每个文件都可以使用Slick.GridSlick.Data.DataView,而无需明确import Slick from "slickgrid2"。这里使用的语法是什么?打字稿手册/文档不包括这种情况。

1 个答案:

答案 0 :(得分:2)

看起来TypeScript不会尝试以这种方式加载输入,除非您导入模块。见Typings for NPM Packages。该来源还说你应该使用“外部模块”而不是命名空间(或“内部模块”),这就是你在这里所做的。

据我所知,你要求的是,在不必进行导入的情况下让你的类型定义“在消费项目中的每个文件中都可用”是不可能的。至少,您需要添加triple-slash reference directive,例如/// <reference path="path/to/typings.d.ts"/>。我想你有几个解决方法选择:

首先,您可以告诉用户在需要时直接引用您的输入:/// <reference path="path/to/node_modules/slickgrid2/typings.d.ts" />

其次,您可以利用DefinitelyTyped和typings

  1. 将您的打字发布到DefinitelyTyped。
  2. 然后,用户可以在他们的项目中使用typings install --source dt --global来安装您的输入。
  3. 您将获得一个typings文件夹作为node_modules的同行。这将包含index.d.ts。该工具将自动添加对您的打字文件的引用。现在,您的用户可以将/// <reference path="typings/index.d.ts" />放在他们想要您的类型定义的每个文件的顶部。对于其他类型,他们可能一直包括该文件。