合并命名空间和变量的声明

时间:2017-05-17 14:31:20

标签: node.js typescript

我正在尝试为第三方库node-tap创建声明文件。简化的问题是:对于库

// node_modules/a/index.js
function A() { /* ... */ }
module.exports = new A();
module.exports.A = A;

什么是正确的*.d.ts声明文件,以允许以下代码成功编译?

// test.ts
import * as a from 'a';
import {A} from 'a';
function f(): A {
    return a;
}

提及将A作为类型很重要,即使在这个简单示例中可以省略它。

1 个答案:

答案 0 :(得分:2)

如果您需要致电new a.A(),请执行:

declare class A {
    A: typeof A;
}
declare const a: A;
declare namespace a {
    export type A = A;
}
export = a;

如果您只需要a.A类型可访问,请执行:

declare const a: a.A;
declare namespace a {
    interface A {}
}
export = a