Tudok határozza meg a felület minden tulajdonság egy tárgy csak egyszer?

szavazat
0

Itt az én tulajdonom, ahol meghatározzuk az interfészt többször:

    ExamStatusId = {
        All: <IEnumElement>{
            id: this.examStatusSelectId,
            text: 'Exam Status: All',
            val: 0
        },
        Current: <IEnumElement>{
            id: this.examStatusSelectId,
            text: 'Exam Status: Current',
            val: 1
        }
    }

Itt a felületet, hogy van:

interface IEnumElement {
    elem: string;
    text: string;
    val: number
}

Van-e bármilyen módon, hogy azt ne kelljen megadnunk azt a felületet, miután minden tulajdonsága ExamStatusId?

A kérdést 16/07/2014 18:20
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
1

Még nem szerepel az elemingatlan, így annyit kell tennie, hogy (bár ez érintőleges).

Saját ajánlás, hogy átfogja a csoda típusú következtetés, és ezt:

interface IEnumElement {
    elem: string;
    text: string;
    val: number
}

class Exam {
    private examStatusSelectId: number;

    ExamStatusId = {
        All: {
            id: this.examStatusSelectId,
            elem: '',
            text: 'Exam Status: All',
            val: 0
        },
        Current: {
            id: this.examStatusSelectId,
            elem: '',
            text: 'Exam Status: Current',
            val: 1
        }
    }
}

// This function must be passed an IEnumElement
function example(element: IEnumElement) {

}

var exam = new Exam();

// The compiler knows this is good
example(exam.ExamStatusId.All);

Ha nem tartalmazza a megfelelő tulajdonságokkal, amikor kijelentette, a ExamStatusIdtulajdonság az osztály, a fordító nem lenne rendesen felismeri a problémát, és mondani róla, mert össze a legjobb gyakori típusa a ExamStatusIdaz IEnumElementinterfész (így akkor is, ha csak kihagyott elemki egy szóra, akkor a figyelmeztetést.

Válaszolt 16/07/2014 18:56
a forrás felhasználó

szavazat
1

Igen ez lehetséges egy plusz felület, mint az alábbi kódot. A generikus IIndexable felületen teszi, hogy a használata is egyszerű a különböző helyeken!

interface IEnumElement {
    elem: string;
    text: string;
    val: number
}

interface IIndexable<T> {
    [index: string]: T;
}

var ExamStatusId: IIndexable<IEnumElement>  = {
    All: {
        elem: "",
        text: 'Exam Status: All',
        val: 0
    },
    Current: {
        elem: "asdf",
        text: 'Exam Status: Current',
        val: 1
    }, 
    X:  {} // this is now an error!
}

edit: A szép dolog a felület, hogy kapsz automatikus kiegészítésre is!

Válaszolt 16/07/2014 18:32
a forrás felhasználó

szavazat
0

Függ a célra. Ha a cél az, hogy a IntelliSense + típusellenőrzés elérésekor tagjai a tárgy az alábbiak szerint:

írja kép leírása itt

És azt szeretné, hogy IntelliSense + típusellenőrzés létrehozásakor az egyes tagok:

írja kép leírása itt

Ezután az oldatot van a legjobb, azt hiszem.

Válaszolt 17/07/2014 00:40
a forrás felhasználó

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