2017-05-17 11 views
1

サードパーティライブラリの宣言ファイルを作成しようとしています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を持つこと、それはこの単純な例では省略することができるにもかかわらず、重要であることを言及します。

答えて

2

あなたがnew a.A()を呼び出すことができるようにする必要がある場合は、操作を行います。

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

あなただけのタイプ​​がアクセスできる必要がある場合は、ん:

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

私はあなたがクラスAを宣言 '維持する必要があると思います{A:typeof A} 'の場合、' aA'は型を参照するだけで 'new aA()'を行うことはできません。 –