Lehetséges használni getter / alkotóinak géppel interfészek?

szavazat
29

Szeretném, hogy meghatározzon egy felület egy csak olvasható tulajdonság. Például;

interface foo {
    get bar():bool;
}

Azonban ez adja a szintaktikai hiba, „várható»;«” a bárban. Van beállít VisualStudio használni a ES5 cél, így getter támogatott. Ez a korlátozás az interfészek? Lehet, hogy ez a jövőben változni; ez egy nagyon szép dolog, hogy képes megtenni.

A kérdést 11/10/2012 18:08
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
31

Getter csak tulajdonságokat be géppel 2,0 :

interface foo {
    readonly bar: boolean;
}
Válaszolt 13/04/2017 11:09
a forrás felhasználó

szavazat
17

Igen, ez a korlátozás az interfészek. Függetlenül attól, hogy a hozzáférés az ingatlan végre egy getter végrehajtási részlet, és így nem lehet része a nyilvános felületen. Lásd még ezt a kérdést .

Ha szüksége van egy csak olvasható attribútumot egy felület, akkor adjunk hozzá egy getter módszer:

interface foo {
    getAttribute() : string;
}
Válaszolt 11/10/2012 19:16
a forrás felhasználó

szavazat
0

Ahogy @Vitaliy Ulantikov válaszol, akkor használhatja a readonlymódosító a tulajdon. Ez működik, pontosan olyan, mint egy getter.

interface Point {
    readonly x: number;
    readonly y: number;
}

Ha egy objektum szó végre a felületen, akkor nem lehet felülírni readonlytulajdonság:

let p1: Point = { x: 10, y: 20 };
p1.x = 5; // error!

De amikor egy osztály megvalósítja az interfészt, nincs mód, hogy elkerüljük felülírja.

class PointClassBroken implements Point {
    // these are required in order to implement correctly
    x: number;
    y: number;

    constructor(x: number, y: number) {
        this.x = x
        this.y = y
    }

    changeCoordinates(x: number, y: number): void {
        this.x = x // no error!
        this.y = y // no error!
    }
}

Azt hiszem, hogy azért, mert ha újra kijelentik tulajdonságait az osztály definíciója, azok felülírják a tulajdonságok a felület, és már nem csak olvasható.

Rögzíteni, hogy használja readonlya tulajdonságok közvetlenül az osztályt, amely megvalósítja az interfészt

class PointClassFixed implements Point {
    readonly x: number;
    readonly y: number;

    constructor(x: number, y: number) {
        this.x = x
        this.y = y
    }

    changeCoordinates(x: number, y: number): void {
        this.x = x // error!
        this.y = y // error!
    }
}

Lásd magad a játszótéren .

Válaszolt 14/09/2018 05:03
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more