我正在尝试为第三方库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
作为类型很重要,即使在这个简单示例中可以省略它。
答案 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