Po pierwsze, Typescript obsługuje składnię get
i obsługuje tylko set
Ecmascript 5. Aby to osiągnąć, musisz wywołać kompilator z
tsc --target ES5
Interfejsy nie obsługują metod pobierających i ustawiających. Aby kod mógł się skompilować, musisz go zmienić na
interface I {
getName():string;
}
class C implements I {
getName():string {
return null;
}
}
Obsługiwany przez maszynopis to specjalna składnia pól w konstruktorach. W twoim przypadku mogłeś
interface I {
getName():string;
}
class C implements I {
constructor(public name: string) {
}
getName():string {
return name;
}
}
Zwróć uwagę, że klasa C
nie określa pola name
. W rzeczywistości jest deklarowany przy użyciu cukru syntaktycznegopublic name: string
w konstruktorze.
Jak podkreśla Sohnee, interfejs ma właściwie ukrywać wszelkie szczegóły implementacji. W moim przykładzie wybrałem interfejs tak, aby wymagał metody pobierania w stylu Java. Możesz jednak również utworzyć właściwość, a następnie pozwolić klasie zdecydować, jak zaimplementować interfejs.
=>
do zdefiniowania metod klas, takich jak ta:name = (a: string) => this._name;
ale w wyjściowym JS zostanie on zdefiniowany wewnątrz funkcji klasy, zamiast rozszerzać jej obiekt prototypowy.