Прежде всего, Машинопись только поддерживает get
и set
синтаксис , когда ориентируется ECMAScript 5. Для достижения этой цели, вы должны вызвать компилятор с
tsc --target ES5
Интерфейсы не поддерживают геттеры и сеттеры. Чтобы ваш код скомпилировался, вам нужно будет изменить его на
interface I {
getName():string;
}
class C implements I {
getName():string {
return null;
}
}
Машинопись поддерживает специальный синтаксис для полей в конструкторах. В вашем случае вы могли бы
interface I {
getName():string;
}
class C implements I {
constructor(public name: string) {
}
getName():string {
return name;
}
}
Обратите внимание, как класс C
не указывает поле name
. Фактически он объявляется с помощью синтаксического сахара public name: string
в конструкторе.
Как указывает Сохни, интерфейс должен скрывать любые детали реализации. В моем примере я выбрал интерфейс, требующий метода получения в стиле Java. Однако вы также можете задать свойство, а затем позволить классу решать, как реализовать интерфейс.
=>
такие методы для определения класса:name = (a: string) => this._name;
но в выходном JS он будет определяться внутри функции класса, а не расширять его объект-прототип.