Búsqueda de sitios web

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;
}

Artículos relacionados