IRawParams
と呼ばれるインターフェイスタイプがあり、これはstring
キーとany
valsを指定するだけです。
interface IRawParams {
[key: string]: any
}
キー/値の上にいくつかの動作を含むParamValues
クラスがあります。 ParamValues
クラスがIRawParams
インターフェースを実装することを指定したいと思います。
class ParamValues implements IRawParams {
parseFromUrl(urlString: string) {
Parser.parse(urlString).forEach(item => this[item.key] = item.val);
}
}
// so I can do something like this
var params = new ParamValues();
params.parseFromUrl(url);
var userId = params.userId;
これを試みると、コンパイラエラーが発生します。
エラーTS2420:クラス 'ParamValues'は、インターフェイス 'IRawParams'を正しく実装していません。タイプ 'ParamValues'にインデックス署名がありません。
クラスにIRawParamsインターフェイスを実装させるか、それともTypeScriptを取得してクラスのインスタンスにインデックス付きの型と互換性を持たせることができますか{[key: string]: any}
?
インデックスシグネチャを持つクラスを定義するには、クラスにインデックスシグネチャを記述します。
interface IRawParams {
[key: string]: any
}
class Foo implements IRawParams {
[k: string]: any;
}