Pesquisa de site

O Typescript não conhece Array.map


Suspeito que cometi um erro, mas não consigo fazer o seguinte passar na verificação de tipos. Acabo recebendo Property 'map' does not exist for type 'Restos'. Configurei a interface de acordo com os tutoriais de TS, então parece que map não está incluído por padrão (tenho "target": "es6" no tsconfig)

interface Resto {
    rname:String,
    qname:String,
    tel:String
}

interface Restos {
    [index:number]:Resto;
}

class MainController {
    headline: String;
    rnames: [String];

    constructor($http : ng.IHttpService) {
        this.headline = "hello world";

        $http.get('http://afbackend.herokuapp.com/api/restos')
        .success( (res:Restos) => {
            console.log(res);
            this.rnames = res.map(r => r.rname)
                              ^^^ 
        });
    }
}

Resposta #1

A única coisa que o compilador sabe ser verdadeira sobre Restos é que, quando você o indexa por um number, você obtém um Resto. Só porque algo tem uma assinatura de índice numérico não significa que seja um array (por exemplo, o objeto {0: 'hello', 1: 'world'} pode ser indexado por números para produzir strings, mas você não pode chamar .map nele).

O que você provavelmente quer escrever é type Restos=Array<Resto> em vez da interface.