模块在这里: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.Grid
和Slick.Data.DataView
,而无需明确import Slick from "slickgrid2"
。这里使用的语法是什么?打字稿手册/文档不包括这种情况。
答案 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
:
typings install --source dt --global
来安装您的输入。您将获得一个typings
文件夹作为node_modules
的同行。这将包含index.d.ts
。该工具将自动添加对您的打字文件的引用。现在,您的用户可以将/// <reference path="typings/index.d.ts" />
放在他们想要您的类型定义的每个文件的顶部。对于其他类型,他们可能一直包括该文件。