Vyhledávání na webu

angular - chyba při deklaraci funkce - Neočekávaný token. Očekával se konstruktor, metoda, přístupová metoda nebo vlastnost


V mé aplikaci Angular2 se setkávám s následujícím problémem.

Neočekávaný token. Očekával se konstruktor, metoda, přístupový prvek nebo vlastnost.

Pro implementaci jsem se řídil následujícím projektem.

https://github.com/Vintharas/angular2-step-by-step-06-consuming-real-data-with-http/blob/master/app/people.service.ts

Nejsem si jistý, proč ve svém kódu dostávám výše uvedenou chybu. Kódoval jsem podle kódu dostupného na výše uvedeném odkazu na GitHub. Následující snímek obrazovky ukáže, kde se chyba objevuje.

Jak vidíte, klíčové slovo function bylo v IDE podtrženo červeně. Opravdu nevidím žádný problém se syntaxí ve svém kódu. (Pocházím z prostředí Java a toto je moje první aplikace v Angularu)

Prosím, ukažte mi, co je zde špatně a jak to opravit.

Toto je můj kompletní kód:

import { Http, Response, Headers } from '@angular/http';
import { Injectable } from '@angular/core';
import { Tender } from './models/Tender';
import { Observable } from 'rxjs/Rx';


@Injectable()
export class TendersService {

    private _endpointUrl: string = "http://127.0.0.1:8080/get-all";

    constructor(private _http: Http) {
    }

    getAllTenders(): Observable<Tender[]> {

        console.log("get all tenders in service");

        let tenders = this._http
            .get(this._endpointUrl)
            .map(mapTenders)
            .catch(handleError);

        console.log('tenders.service.ts -> retrieved tenders = '+tenders);
        return tenders;
    }

    function mapTenders(response: Response): Tender[] {
        console.log('tender.service.ts -> mapTenders');
        return response.json().map(toTender);
    }

    function toTender(r: any): Tender {
        console.log('tender.service.ts -> toTender');
        let tender = <Tender>({
            id: r.id,
            name: r.name,
            description: r.description,
            category: r.category,
            district: r.district,
            town: r.town,
            imageUrls: r.imageUrls,
            referenceNumber: r.referenceNumber,
            addresses: r.addresses,
            telNos: r.telNos,
            dateTimePosted: r.dateTimePosted,
            lastUpdateOn: r.lastUpdateOn
        });
        console.log('Parsed tender in service :', tender);
        return tender;
    }


    function handleError(error: any) {
        let errorMsg = error.message || `Yikes! There was was a problem with our hyperdrive device and we couldn't retrieve your data!`
        console.error(errorMsg);

        // throw an application level error
        return Observable.throw(errorMsg);
    }

}

Odpověď č. 1

V TypeScriptu deklarujte funkce uvnitř metod, mimo třídy nebo jako vlastnosti tříd (a na některých dalších místech), ale ne jako přímé potomky tříd. Přímí potomci tříd musí být konstruktory, metody, přístupové metody nebo vlastnosti.

Zde je příklad; překladač umožňuje všechny následující deklarace funkcí.

class SomeClass {

    foo = function() { };

    someMethod() {

        function bar() { }

    }
}

function baz() {  }

Stojí za to si pohrát s TypeScriptem a projít oficiální tutoriál JavaScriptu do TypeScriptu.