2016-06-16 25 views
19

Ich bin relativ neu sowohl Angular2 und Typoskript. Da Typoskript eine Obermenge von Javascript ist, würde ich erwarten, dass Funktionen wie console.log funktionieren. console.log funktioniert einwandfrei in .ts Dateien außerhalb einer Komponentenklasse, funktioniert aber nicht so, wie ich es von der Komponentenklasse erwarten würde.console.log funktioniert nicht in Angular2 Komponente (Typescript)

// main.ts 

import { Component } from '@angular/core'; 
console.log("Hello1"); //1. This works perfectly 

@Component({..) 
export class App { 
s: string = "Hello2"; 
// console.log(s); //2. This gives compilation error (when uncommented) 
// Error: Function implementation is missing or not immediately following the declaration. 
} 

Gibt es etwas, das ich vermisse?

+1

was hast du in die @Component gelegt? Können Sie versuchen, einen Konstruktor in der Klasse wie folgt zu setzen: constructor() {console.log ('test')} –

+1

ich denke, es funktioniert nicht, da console.log nicht in einer Funktion verpackt ist. Können Sie das JS-kompilierte Formular anzeigen? –

+0

@ L.querter: console.log funktioniert, wenn es innerhalb des Konstruktors verwendet wird, funktioniert aber nicht, wenn es außerhalb des Konstruktors verwendet wird, selbst wenn Konstruktor vorhanden ist. Vielleicht ist es notwendig, es in eine Funktion zu verpacken. Ich war mir dessen nicht bewusst. –

Antwort

36

Es funktioniert nicht, weil console.log() es nicht in einem "ausführbaren Bereich" der Klasse "App" ist.

Eine Klasse ist eine Struktur, die aus Attributen und Methoden besteht.

Die einzige Möglichkeit, Ihren Code auszuführen, besteht darin, ihn in eine Methode einzufügen, die ausgeführt wird. Zum Beispiel: Konstruktor()

console.log('It works here') 
 

 
@Component({..) 
 
export class App { 
 
s: string = "Hello2"; 
 
      
 
    constructor() { 
 
    console.log(this.s)    
 
    }    
 
}

Denken der Klasse wie ein einfaches Objekt JavaScript.

Wäre es sinnvoll zu erwarten, dass dies funktioniert?

class: { 
 
    s: string, 
 
    console.log(s) 
 
}

Wenn Sie noch unsicher, das Typoskript Spielplatz versuchen, wo Sie Ihre Typoskript Code generiert in einfache Javascript sehen kann.

https://www.typescriptlang.org/play/index.html

+0

Eine Variable Initialisierung ist auch ein Ausdruck, und ich bin verwirrt, warum das außerhalb des Bereichs des Konstruktors funktioniert und Funktionsaufrufe nicht. –

+0

Versuchen Sie das oben erwähnte Typoskript playgroung, Sie werden sehen, dass jede Variablendefinition in einen JavaScript-Funktionskörper umgewandelt wird. –

3

Die console.log sollte in einer Funktion, die „default“ Funktion für jede Klasse eingewickelt werden soll, seine constructor so sollte es dort deklariert werden.

0

Versuchen Sie auch, Ihren Browser zu aktualisieren, weil Angular neuesten Browser benötigen. überprüfen: https://angular.io/guide/browser-support

Ich behoben console.log Problem nach der Aktualisierung des neuesten Browsers.

Verwandte Themen