Αναφορά στη λειτουργία κατασκευαστή

ψήφοι
14

Im αναρωτιούνται πώς μπορώ να πάρω μια αναφορά σε ένα κατασκευαστή τύπους για να περάσει τη λειτουργία ως αξία. Βασικά, θα ήθελα να έχουμε μια γενική μητρώου τύπου που θα επέτρεπε περιπτώσεις να δημιουργηθεί καλώντας μια συνάρτηση μέλος μιας γενικής παράδειγμα μητρώου τύπου.

Για παράδειγμα:

class GeometryTypeInfo
{        
    constructor (public typeId: number, public typeName: string, public fnCtor: (...args: any[]) => IGeometry) {
    }
    createInstance(...args: any[]) : IGeometry { return this.fnCtor(args); }
    }
}

Αργότερα:

class Point implements IGeometry {
    constructor(public x: number, public y: number) { }

    public static type_info = new GeometryTypeInfo(1, 'POINT', Point); // <- fails
    // also fails: 
    //    new GeometryTypeInfo(1, 'POINT', new Point);
    //    new GeometryTypeInfo(1, 'POINT', Point.prototype);
    //    new GeometryTypeInfo(1, 'POINT', Point.bind(this));
}

Όποιος γνωρίζει αν είναι δυνατόν να αναφέρονται σε μια λειτουργία τάξεις κατασκευαστή;

Δημοσιεύθηκε 08/10/2012 στις 19:17
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
18

Μπορείτε να χρησιμοποιήσετε τον τύπο κατασκευαστή κατά γράμμα ή έναν τύπο αντικειμένου γραμματική με την υπογραφή κατασκευή για να περιγράψει το είδος του κατασκευαστή (βλέπε, γενικά, τμήμα 3.5 της γλώσσας spec). Για να χρησιμοποιήσετε το παράδειγμά σας, τα ακόλουθα θα πρέπει να εργαστεί:

interface IGeometry {
    x: number;
    y: number;
}

class GeometryTypeInfo
{        
    constructor (public typeId: number, public typeName: string, public fnCtor: new (...args: any[]) => IGeometry) {
    }
    createInstance(...args: any[]) : IGeometry { return new this.fnCtor(args); }
}

class Point implements IGeometry {
    constructor(public x: number, public y: number) { }

    public static type_info = new GeometryTypeInfo(1, 'POINT', Point);
}

Ανακοίνωση για τον τύπο του κατασκευαστή κυριολεκτική στον κατασκευαστή λίστα παραμέτρων GenometryTypeInfo, καθώς και τη νέα κλήση στην εφαρμογή των CreateInstance.

Απαντήθηκε 08/10/2012 στις 19:27
πηγή χρήστη

ψήφοι
6

typeof YourClassσας δίνει κατασκευαστή τύπο που μπορεί να χρησιμοποιηθεί σε σχολιασμούς τύπου.

YourClassκαι this.constructorείναι το ίδιο κατασκευαστή. Έτσι, αυτός ο κώδικας συγκεντρώνει:

class A {}

const B : typeof A = A;

this.constructor δεν αναγνωρίζεται ως αξία του κατασκευαστή τύπου με γραφομηχανή (το οποίο είναι αστείο), έτσι ώστε σε καταστάσεις όπως αυτή θα πρέπει να χρησιμοποιήσετε κάποια εξαπάτηση χύτευσης που δεν any

new (<any> this.constructor)()

Αυτό είναι.

Απαντήθηκε 30/06/2016 στις 19:40
πηγή χρήστη

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