Немного поправлю Евгения, достаточно объявить нужное поле в классе, тип можно не ставить:
export class AppComponent {
sommm; // Можно и без типа, зависит от настройки компилятора
title = 'hero';
hero: Hero = {
id: 1,
name: 'Wind'
}
constructor (){
this.sommm = 'from this some'
}
}
Или ещё можно добавить модификатор в аргумент конструктора:
export class AppComponent {
// В Angular 2 так можно делать в классах,
// которые не являются компонентами/директивами/сервисами/пайпами и т.п.
constructor (public sommm: string = 'from this some') {}
}
// Это аналогично такому:
export class AppComponent {
sommm: string;
constructor (sommm: string = 'from this some') {
this.sommm = sommm;
}
}
Но типы всё-таки лучше указывать.
UPD 0. В TypeScript обычно, если переменная имеет тип, отличный от any, то динамически добавлять поля в неё нельзя. Когда создаётся экземпляр класса (оператор new), вызывается специальный метод с именем 'constructor'. Ты пытаешься в конструкторе записать в поле sommm. Компилятор TypeScript работает до рантайма и типы определяет исходя из объявления класса. В данном случае, тип AppComponent имеет 2 поля (title, hero). Так что с его точки зрения, у типа AppComponent нет поля sommm, потому-то он и ругается.
Иногда, видимо из-за особенностей лайв-серверов, бывает, что хоть компилятор и ругается на несоответствие типов, но код запускается и работает, ведь с точки зрения JS, всё выглядит верно.
UPD 1. Хоть я и привёл пример, где не указывал типы переменных, но так делать не стоит (почти) никогда. Чтобы оградить себя от написания такого кода, можно добавить
опцию компилятора "noImplicitAny". Без неё следующий код скомпилируется без ошибок:
let a;
function foo(bar) {}
class Bar {
foo;
private bar;
}
Со включённой опцией компилятор выдаст ошибки там, где переменные, аргументы функций и методов или поля классов объявлены без типов.
Нужно всегда стараться указывать тип у переменных. Если один тип не подходит, можно попробовать сделать функцию/метод/класс
дженериками. Если тип неизвестен - то можно поставить any. Но обычно такое бывает редко, ведь обычно ты знаешь, что за тип ожидается (у меня в проектах практически нет переменных с типом any).
UPD 2. Я привёл пример, где в конструкторе указывается модификатор. Это специальный синтаксис в Typescript, который позволяет уменьшить количество повторяющегося кода.
Однако, есть важный момент: внедрение зависимостей в компоненты/директивы/сервисы/и т.п. во втором ангуляре идёт через конструктор. Причём, в typescript-версии, фреймворк по-умолчанию извлекает информацию о типе аргумента конструктора и пытается внедрить по этому типу нужную зависимость. Поэтому в конструкторах должны быть только внедряемые зависимости.
UPD 3. Если пишешь на ангуляре, то стоит изучить
styleguide и стараться следовать ему. Плюс, хорошо ещё прикрутить к проекту tslint.