Перш за все, Машинопис тільки підтримує 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 це буде визначено всередині функції класу, а не розширюватиме його об'єкт-прототип.