Η επέκταση Array στη γραφομηχανή

ψήφοι
32

Πώς να προσθέσετε μια μέθοδο σε έναν τύπο βάσης, λένε Array; Στην παγκόσμια ενότητα αυτή θα αναγνωριστεί

interface Array {
   remove(o): Array;
}

αλλά πού να βάλει την πραγματική εφαρμογή;

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


5 απαντήσεις

ψήφοι
45

Μπορείτε να χρησιμοποιήσετε το πρότυπο για την επέκταση Array:

interface Array<T> {
   remove(o: T): Array<T>;
}

Array.prototype.remove = function (o) {
    // code to remove "o"
    return this;
}
Απαντήθηκε 09/10/2012 στις 16:11
πηγή χρήστη

ψήφοι
27

declare globalφαίνεται να είναι το εισιτήριο από γραφομηχανή 2.1. Σημειώστε ότι Array.prototypeείναι του τύπου any[], οπότε αν θέλετε να έχετε την εφαρμογή σας λειτουργία ελέγχεται για τη συνοχή, καλύτερα να προσθέσετε μια γενική παράμετρος τύπου εαυτό σας.

declare global {
  interface Array<T> {
    remove(elem: T): Array<T>;
  }
}

if (!Array.prototype.remove) {
  Array.prototype.remove = function<T>(elem: T): T[] {
    return this.filter(e => e !== elem);
  }
}
Απαντήθηκε 01/01/2017 στις 04:47
πηγή χρήστη

ψήφοι
6

Από γραφομηχανή 1.6, μπορείτε να «εγγενώς» επεκτείνει αυθαίρετη εκφράσεις όπως ενσωματωμένη τύπους.

Τι νέο υπάρχει στο γραφομηχανή :

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

Το εκτείνεται ρήτρα μιας κατηγορίας απαιτείται προηγουμένως μια αναφορά τύπου που πρόκειται να καθοριστεί. Δέχεται τώρα μια έκφραση προαιρετικά ακολουθείται από μια λίστα ορισμάτων τύπου. Ο τύπος της έκφρασης πρέπει να είναι ένας τύπος συνάρτηση κατασκευαστή με τουλάχιστον ένα κατασκεύασμα υπογραφή που έχει τον ίδιο αριθμό των παραμέτρων τύπου καθώς ο αριθμός των επιχειρημάτων τύπου που καθορίζεται στην ενότητα εκτείνεται ρήτρα. Ο τύπος επιστροφής της υπογραφής (ες) ταιριάσματος κατασκεύασμα είναι ο τύπος βάσης από την οποία κληρονομεί ο τύπος τάξη παράδειγμα. Ουσιαστικά, αυτό επιτρέπει τόσο πραγματικό τάξεις και «τάξη-όπως» εκφράσεις που πρέπει να προσδιορίζονται στην εκτείνεται ρήτρα.

// Extend built-in types

class MyArray extends Array<number> { }
class MyError extends Error { }

// Extend computed base class

class ThingA {
    getGreeting() { return "Hello from A"; }
}

class ThingB {
    getGreeting() { return "Hello from B"; }
}

interface Greeter {
    getGreeting(): string;
}

interface GreeterConstructor {
    new (): Greeter;
}

function getGreeterBase(): GreeterConstructor {
    return Math.random() >= 0.5 ? ThingA : ThingB;
}

class Test extends getGreeterBase() {
    sayHello() {
        console.log(this.getGreeting());
    }
}
Απαντήθηκε 19/10/2015 στις 15:03
πηγή χρήστη

ψήφοι
3
class MyArray<T> extends Array<T> {
    remove: (elem: T) => Array<T> = function(elem: T) {
        return this.filter(e => e !== elem);
    }
}
let myArr = new MyArray<string>();
myArr.remove("some");

αυτό λειτουργεί για μένα με γραφομηχανή Ν2.2.1!

Απαντήθηκε 27/03/2017 στις 15:14
πηγή χρήστη

ψήφοι
2

Προσθέτοντας σε απάντηση Ρίκκι Γκίμπσον,

export{}
declare global {
    interface Array<T> {
        remove(elem: T): Array<T>;
    }
}

if (!Array.prototype.remove) {
  Array.prototype.remove = function<T>(elem: T): T[] {
      return this.filter(e => e !== elem);
  }
}

Χωρίς την εξαγωγή {} TS σφάλμα «επαυξήσεις για την παγκόσμια εμβέλεια μπορεί να είναι ένθετα μόνο άμεσα σε εξωτερικές μονάδες ή δηλώσεις μονάδα περιβάλλοντος.»

Απαντήθηκε 28/03/2018 στις 11:48
πηγή χρήστη

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