2015-08-13 6 views
7

У меня есть интерфейс типа IRawParams, который просто указывает ключ string и any vals.Могу ли я определить класс Typcript, который имеет подпись индекса?

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; 

Когда я пытаюсь это, я получаю ошибку компиляции:

error TS2420: Class 'ParamValues' incorrectly implements interface 'IRawParams'. Index signature is missing in type 'ParamValues'.

Могу ли я получить мой класс для реализации IRawParams интерфейса, или иным образом получить машинопись, чтобы экземпляры моего класса, чтобы быть совместимым с индексированный тип {[key: string]: any}?

ответ

11

Для определения класса с индексом подписи, просто напишите указательный подпись в классе:

interface IRawParams { 
    [key: string]: any 
} 

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

Спасибо! Теперь я чувствую себя идиотом. Я обернул подпись фигурными фигурными скобками: '{[key: string]: any}' –