2016-07-30 7 views
1

TypescriptでAPIをモデル化する方法について少し混乱します。Typescript宣言ファイルのモデリング(long-ish)API

私は使用例のために、見えhexo APIを、モデル化しようとしています。このようなビット:しかし

//hexo.d.ts 
declare module 'hexo' { 
    namespace extend { 
     export class tag { 
      public register: _register; 
     } 
    } 
} 

declare class _register { 
    name: string; 
    callback(args: any, content: any); 
    options: _options; 
} 

declare class _options { 
    ends: boolean; 
} 

:これまでのところ、私はこのようなものを持っている

hexo.extend.tag.register(name, function(args, content){ 
    // ... 
}, options); 

プロパティ 'typeof tag'にプロパティ 'register'が存在しません。

これをモデル化するには、モジュールの名前空間にクラスを宣言した後にTypescriptが少し複雑になっているように見えますが、それらの型はどれも内部に存在できません。

.d.tsファイルのようになりますか?

答えて

1

一般に、newで呼び出された場合、何かがクラスにすぎません。そうでない場合は、 です。私はそのような何かをしたい:モジュールは(クラスHexoは、モジュール自体ではなく、その内部の対象となります)単一のオブジェクトをエクスポートするとき

declare module 'hexo' { 
    class Hexo { 
     constructor(cwd, opts) 
     load() : Promise<any> 
     extend : { 
      console : any //declare me later, set any for now 
      // etc 
      tag : { 
       register(name:string, cb: (args,content) => void , opts : any) 
      } 
     } 
    } 
    export = Hexo; 
} 

export = somethingが使用されています。

PS:コールバックタイプ(実際には任意のタイプ)は、typeキーワードを使用して参照できます。 typeキーワードは、interfaceキーワードに置き換えることもできます。

type someCallback = (err : Error , resp : HttpResponse) => Promise<any> 
関連する問題