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.

Relaterade artiklar