console.log не работает в Angular2 Component (Typescript)

Я относительно новичок в Angular2 и машинописи. Поскольку typcript - это расширенный набор javascript, я ожидаю, что такие функции, какconsole.log работать.console.log отлично работает в.ts файлы, находящиеся вне класса компонента, но не работают так, как я ожидал бы из класса компонента.

// 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.
}

Есть ли что-то, что мне не хватает?

 L.querter16 июн. 2016 г., 23:21
я думаю, что это не работает, потому что console.log не обернут в функцию. Можете ли вы показать JS скомпилированную форму?
 L.querter16 июн. 2016 г., 23:19
что вы положили в @Component? Можете ли вы попробовать поместить конструктор в класс следующим образом: constructor () {console.log ('test')}
 Pranjal Mittal16 июн. 2016 г., 23:26
@ L.querter: console.log работает, когда он используется внутри конструктора, но не работает, когда используется вне конструктора, даже если конструктор присутствует. Может быть, нужно обернуть его в функцию. Я не знал об этом.

Ответы на вопрос(3)

console.log должен быть заключен в функцию, функция «по умолчанию» для каждого классаconstructor так что это должно быть объявлено там.

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

 @Component({
  selector: 'hello-console',
})
    export class App {
     s: string = "Hello2";
    constructor(){
     console.log(s); 
    }

}

Также попробуйте обновить ваш браузер, потому что Angular нужен последний браузер. проверять:https://angular.io/guide/browser-support

Я исправил проблему console.log после обновления последней версии браузера.

Решение Вопроса

Это не работает, потому что console.log () находится не в «исполняемой области» класса «App».

Класс - это структура, состоящая из атрибутов и методов.

Единственный способ выполнить ваш код - это поместить его в метод, который будет выполняться. Например: конструктор ()

console.log('It works here')

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

Думайте о классе как о простом объекте JavaScript.

Имеет ли смысл ожидать, что это сработает?

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

Если вы все еще не уверены, попробуйте игровую площадку, где вы можете увидеть свой машинописный код, сгенерированный в виде простого JavaScript.

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

 QuestForMastery06 июн. 2019 г., 11:52
В приведенном вами примере javascript все равно не имеет смысла, что s: string, console.log (s) не должны возвращать хотя бы какое-то значение. Следует по крайней мере сказать, что в браузере s имеет тип string.
 Mauricio Gracia Gutierrez08 апр. 2019 г., 22:47
что-то настолько очевидное, и я начинал сходить с ума, пытаясь решить это - спасибо
 Pranjal Mittal17 июн. 2016 г., 01:49
Инициализация переменной также является выражением, и меня смущает, почему это работает вне области видимости конструктора, а вызовы функций - нет.
 Daniel Pliscki17 июн. 2016 г., 14:05
Попробуйте игру с набором текста, о которой я упоминал выше, и вы увидите, что каждое определение переменной передается в тело функции javascript.

Ваш ответ на вопрос