经过一些试验和错误后,我想出了如何为复杂的NPM javascript包编写.d.ts文件。该软件包使用bluebird promises,因此需要导入bluebird并导出bluebird Promise接口。我发现的解决方案归结为这样的事情:
/// <reference path='../typings/bluebird/bluebird.d.ts' />
declare module 'other' {
import Promise = require('bluebird');
interface Foo {
func1(): Promise<void>;
}
var Other: Foo;
export = Other;
}
declare module Other {
export module X {
export interface Y {
func2(): Promise<void>;
}
}
}
此文件中没有任何地方显式导出Promise
,但是Typescript应用程序可以通过引用路径和import Other = require('other');
导入此模块,然后使用类型Promise
,甚至不需要将类型作为范围Other.Promise
。
我看过手册和语言规范,试图更好地理解无济于事,但也许我错过了一些东西。似乎export = <identifier>;
导出的内容多于标识符。谁能开导我?
答案 0 :(得分:1)
问题出在bluebird.d.ts:
declare class Promise<R> implements Promise.Thenable<R>, Promise.Inspection<R>
它在全局范围内声明该类。
答案 1 :(得分:1)
此文件中没有任何地方显式导出Promise,但是Typescript应用程序可以通过引用路径导入此模块并导入Other = require('other');
当文件a
执行/// <reference foo
后文件b
执行/// <reference a
时,文件b
会隐式引用{{ 1}}
此处您的文件引用了foo
,因此bluebird
您的文件将隐含地引用references
。
bluebird
/ /// <reference
, import
仅有效。如果文件中存在根级export
,则将其视为外部模块,并且只能在另一个文件中引入相应的export
。