Μπορώ να ορίσετε μια διεπαφή για κάθε ιδιοκτησία ενός αντικειμένου μόνο η μία φορά;

ψήφοι
0

Εδώ είναι ιδιοκτησία μου, όπου η διασύνδεση ορίζεται πολλές φορές:

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

Εδώ είναι το interface που έχω:

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

Υπάρχει κάποιος τρόπος που μπορώ να αποφύγει να καθορίσετε το περιβάλλον μετά από κάθε ιδιοκτησία των ExamStatusId εκεί;

Δημοσιεύθηκε 16/07/2014 στις 18:20
πηγή χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
1

Δεν έχουν συμπεριλάβει το elemακίνητο, έτσι πρέπει να το κάνουμε αυτό (αν και αυτό είναι εφαπτόμενη).

Η σύστασή μου είναι ότι θα αγκαλιάσει το θαύμα του τύπου συμπέρασμα, και να το κάνετε αυτό:

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);

Αν δεν περιλαμβάνουν τις σωστές ιδιότητες όταν κήρυξε την ExamStatusIdιδιοκτησία στην τάξη σας, ο compiler θα εντοπίσει σωστά το πρόβλημα και να σας πω γι 'αυτό, γιατί θα συγκρίνει την καλύτερη κοινός τύπος στο ExamStatusIdμε το IEnumElementπεριβάλλον (έτσι ακόμα κι αν μόνο έχασε elemαπό ένα, θα παίρνατε την προειδοποίηση.

Απαντήθηκε 16/07/2014 στις 18:56
πηγή χρήστη

ψήφοι
1

Ναι αυτό είναι δυνατόν με μια επιπλέον διεπαφή, όπως παρακάτω κώδικα. Η γενική IIndexable διεπαφή το καθιστά επίσης εύκολο στη χρήση σε διαφορετικά μέρη!

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: Το θετικό σχετικά με τη χρήση του interface είναι ότι θα πάρετε αυτόματη συμπλήρωση πάρα πολύ!

Απαντήθηκε 16/07/2014 στις 18:32
πηγή χρήστη

ψήφοι
0

Εξαρτάται από το σκοπό σας. Αν ο σκοπός σας είναι να πάρετε τον έλεγχο intellisense + τύπου κατά την πρόσβαση των μελών του αντικειμένου, όπως φαίνεται παρακάτω:

εισάγετε περιγραφή της εικόνας εδώ

Και θέλετε τον έλεγχο intellisense τύπου + κατά τη δημιουργία των μεμονωμένων μελών:

εισάγετε περιγραφή της εικόνας εδώ

Στη συνέχεια, η λύση που έχετε είναι το καλύτερο που μπορώ να σκεφτώ.

Απαντήθηκε 17/07/2014 στις 00:40
πηγή χρήστη

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