υπογραφές τύπου γραφομηχανή για τις λειτουργίες με μεταβλητή μετράει επιχείρημα

ψήφοι
61

Αντιμετωπίζω πρόβλημα καθορισμού των διεπαφών με τα μέλη της λειτουργία που δέχονται ποικίλες ποσότητες των επιχειρημάτων. Πάρτε το ακόλουθο αντικείμενο κυριολεκτική ως παράδειγμα:

var obj = {
    func: () => {
        for(var i = 0; i < arguments.length; i++) {
            console.log(arguments[i]);
        }
    }
};

Θα ήθελα να είναι σε θέση να καθορίσει μια διεπαφή, όπως:

interface IExample {
    func: ( ??? ) => void;
}

Έτσι ώστε ο κώδικας που ακολουθεί μπορεί να καταρτίσει χωρίς σφάλμα:

var test = (o: IExample) {
    o.func(a);
    o.func(a, b);
    o.func(a, b, c);
    ...
}
Δημοσιεύθηκε 05/10/2012 στις 04:40
πηγή χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
106

Γραφομηχανή χρησιμοποιεί την πρόταση ECMAScript 6 εξάπλωση,

http://wiki.ecmascript.org/doku.php?id=harmony:spread

αλλά προσθέτει πληκτρολογήστε σχολιασμούς έτσι αυτό θα μοιάζει,

interface IExample {
    func(...args: any[]): void;
}
Απαντήθηκε 05/10/2012 στις 04:53
πηγή χρήστη

ψήφοι
2

Ακριβώς για να προσθέσει στην απάντηση του Chuck, δεν χρειάζεται να έχουν μια διεπαφή που ορίζεται ως τέτοια. Μπορείτε να κάνετε ακριβώς το ...άμεσα στη μέθοδο:

class Header { constructor(public name: string, public value: string) {} }

getHeaders(...additionalHeaders: Header[]): HttpHeaders {
    let headers = new HttpHeaders();
    headers.append('Content-Type', 'application/json')

    if (additionalHeaders && additionalHeaders.length)
        for (var header of additionalHeaders)
            headers.append(header.name, header.value);

    return headers;
}

Στη συνέχεια, μπορείτε να καλέσετε:

headers: this.getHeaders(new Header('X-Auth-Token', this.getToken()))

Ή

headers: this.getHeaders(new Header('X-Auth-Token', this.getToken()), new Header('Something', "Else"))
Απαντήθηκε 04/02/2018 στις 12:49
πηγή χρήστη

ψήφοι
0

Αν ο ... args [] επιχείρημα αυτό δεν χρησιμοποιείται γραφομηχανή εξακολουθεί να δημιουργεί έναν πίνακα στο Javascript και τα αντίγραφα των επιχειρημάτων της.

Για να αποφευχθεί αυτό περιττότης μπορείτε να κάνετε ένα πρωτότυπο για τη λειτουργία, καθώς και η λειτουργία, ως εξής: -

function format_n(str: string, ... $n: any[]): string;
function format_n(str: string): string {
    return str.replace(/%(\d+)/g, (_, n) => format_n.arguments[n]);
}
Απαντήθηκε 21/05/2018 στις 14:34
πηγή χρήστη

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