typescript - Deklarera skyddad attribut i gränssnitt
Är det möjligt att deklarera skyddade attribut i TypeScript-gränssnitt?
Till exempel:
interface IsDrawable {
// protected // <- seems to be unsupported
cssClass: string;
}
class SomeClass implements IsDrawable {
protected // <- errors
cssClass: string;
}
SomeClass felar med:
Class 'SomeClass' incorrectly implements interface 'IsDrawable'.
Property 'cssClass' is protected in type 'SomeClass' but public in type 'IsDrawable'.
Svar #1
Försök att förstå betydelsen av Interface i alla språk.
Eftersom Interface är ett schema som vem som helst kan använda för att få tillgång till vissa klassfunktioner, kan dess fält inte vara privata eller skyddade
Svar #2
Ett gränssnitt är ett kontrakt vilket betyder att du berättar för enheter utanför dig själv vad du kan göra och vad du har, genom att göra dem skyddade bryter du det kontraktet.
Det sagt, om du vill tvinga implementeringen av något som är scoped som protected, kan du använda abstrakta klasser för att passa det behovet. De är nya från och med version 1.6 https://github.com/Microsoft/TypeScript/issues/3578
Uppdatering
abstract kan inte appliceras på egenskaper, så för att detta ska fungera skulle cssClass behöva vara en metod som returnerar strängen.