合并名称空间和variables的声明

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

 // 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作为types是重要的,尽pipe在这个简单的例子中可以省略它。

如果您需要能够调用new aA() ,请执行以下操作:

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

如果您只需要typesaA可访问,请执行以下操作:

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