8

コンパイル済みのハンドルバースクリプトで使用するために、ハンドルバーの定義ファイルを作成しようとしています。ハンドルバーは、コンパイル済みのスクリプトを関数の文字列インデックス付きハッシュテーブルに配置しますが、これがどのように定義されるかを理解または見つけることができません。

架空の定義は次のようになります。

declare module Handlebars {
    export var templates: { (model:any) => string; }[index: string];
}

しかし、それは有効な定義ではありません。定義は次のような呼び出しで機能するはずです。

var myHtml = Handlebars.templates["person-template"]({FNmae: "Eric"});

このような定義は近いです:

export var templates: { (model:any) => string; }[];

ただし、これは数値インデックスを持つ配列であり、同じものではありません。VSIntellisenseは、配列内の関数が任意であると判断するだけです。

4

1 に答える 1

12

使用したいのは、インデックス署名付きのオブジェクトタイプです(仕様セクション3.5.3、具体的には3.5.3.3を参照)。

declare module Handlebars {
    export var templates: {
        [s: string]: (model: any) => string;
    }
}
于 2012-10-11T18:57:20.437 に答える