Ben bir nesne sadece bir kez her özellik için bir arabirim tanımlayabilir misin?

oy
0

İşte arayüzü birden çok kez tanımlanır benim malım:

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

İşte ben arayüzü:

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

Ben ExamStatusId her özellik sonra arayüze belirtmek zorunda kalmamak için bir yolu var mı?

Oluştur 16/07/2014 saat 18:20
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
1

Sen dahil değil elemözelliğini, yani (bu teğet olmasına rağmen) bunu yapmak zorunda.

Benim tavsiye tür kesmesi mucizelerini benimsemesi ve bunu olmasıdır:

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

Eğer ilan ettiği doğru özelliklerini içermiyordu ise ExamStatusIdclassınıza özelliği, derleyici doğru sorunu tespit edecek ve en iyi ortak türünü karşılaştırmak, çünkü bunu sana anlatmaya ExamStatusIdile IEnumElementarayüzüne (şimdiye dahi geçerlidir sadece cevapsız elembirinin kapalı şeklinde bir uyarı olacaktı.

Cevap 16/07/2014 saat 18:56
kaynak kullanıcı

oy
1

Evet aşağıda kodu gibi ekstra bir arayüz ile mümkündür. Jenerik IIndexable arayüzü farklı yerlerde kullanmak da kolaylaştırıyor!

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!
}

düzenleme: arayüzünü kullanarak ilgili güzel bir şey de otomatik tamamlama alacak olmasıdır!

Cevap 16/07/2014 saat 18:32
kaynak kullanıcı

oy
0

Amacınıza bağlıdır. amacınız Nesne üyelerini erişirken intellisense + tür denetlemesi almak için ise aşağıda gösterildiği gibi:

Burada görüntü açıklama girin

Ve tek tek üyeleri oluştururken intellisense + tür denetlemesi istiyorum:

Burada görüntü açıklama girin

O zaman var çözüm aklıma gelen en iyi biridir.

Cevap 17/07/2014 saat 00:40
kaynak kullanıcı

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