typescript1.5 - ¿Puedo definir una clase de Typescript que tenga una firma de índice?
Tengo un tipo de interfaz llamado IRawParams que simplemente especifica una clave string y valores any.
interface IRawParams {
[key: string]: any
}
Tengo una clase, ParamValues, que contiene algún comportamiento sobre claves/valores. Me gustaría especificar que la clase ParamValues implementa la interfaz 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;
Cuando intento esto, obtengo un error de compilación:
error TS2420: La clase 'ParamValues' implementa incorrectamente la interfaz 'IRawParams'. La firma de índice falta en el tipo 'ParamValues'.
¿Puedo hacer que mi clase implemente la interfaz IRawParams, o de lo contrario lograr que TypeScript permita que las instancias de mi clase sean compatibles con un tipo indexado {[key: string]: any}?
Respuesta #1
Para definir una clase con una firma de índice, solo escribe la firma de índice en la clase:
interface IRawParams {
[key: string]: any
}
class Foo implements IRawParams {
[k: string]: any;
}
