我可以定义一个具有索引签名的Typescript类吗?

时间:2015-08-13 00:13:10

标签: typescript typescript1.5

我有一个名为IRawParams的接口类型,它只指定string个密钥和any个值。

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}兼容?

1 个答案:

答案 0 :(得分:22)

要定义具有索引签名的类,只需在类中编写索引签名:

interface IRawParams {
    [key: string]: any
}

class Foo implements IRawParams {
    [k: string]: any;
}