我可以定义一个带有索引签名的 Typescript class 吗?
Can I define a Typescript class which has an index signature?
我有一个名为 IRawParams
的接口类型,它只指定了一个 string
键和 any
值。
interface IRawParams {
[key: string]: any
}
我有一个 class,ParamValues
,其中包含一些在 keys/values 之上的行为。我想指定 ParamValues
class 实现 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;
当我尝试这样做时,出现编译器错误:
error TS2420: Class 'ParamValues' incorrectly implements interface 'IRawParams'.
Index signature is missing in type 'ParamValues'.
我能否让我的 class 实现 IRawParams 接口,或者让 Typescript 允许我的 class 实例与索引类型 {[key: string]: any}
兼容?
要定义带有索引签名的class,只需将索引签名写在class:
interface IRawParams {
[key: string]: any
}
class Foo implements IRawParams {
[k: string]: any;
}
我有一个名为 IRawParams
的接口类型,它只指定了一个 string
键和 any
值。
interface IRawParams {
[key: string]: any
}
我有一个 class,ParamValues
,其中包含一些在 keys/values 之上的行为。我想指定 ParamValues
class 实现 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;
当我尝试这样做时,出现编译器错误:
error TS2420: Class 'ParamValues' incorrectly implements interface 'IRawParams'. Index signature is missing in type 'ParamValues'.
我能否让我的 class 实现 IRawParams 接口,或者让 Typescript 允许我的 class 实例与索引类型 {[key: string]: any}
兼容?
要定义带有索引签名的class,只需将索引签名写在class:
interface IRawParams {
[key: string]: any
}
class Foo implements IRawParams {
[k: string]: any;
}