Da sempre, JavaScript offre la possibilità di aggiungere funzioni al prototype di una classe così che ogni istanza di questa classe possa beneficiare di queste funzioni. Anche altri linguaggi più strutturati come C# e Java offrono questa funzionalità. TypeScript ovviamente offre questa funzionalità (definita Module Augmentation), ma è necessario fare un passagio in più in quanto da TypeScript non siamo a conoscenza dei metodi aggiunti tramite JavaScript. Prendiamo il seguente codice.
declare global { interface Array<T> { distinct<K>(): K[]; } } Array.prototype.distinct = function<K>() { return <K[]>(this.filter((value, index, self) => self.indexOf(value) === index)); };
Il primo step è quello di dichiarare un modulo global (quello a cui in TypeScript sono collegate tutte le classi di default di JavaScript) all'interno del quale dichiariamo che l'interfaccia Array ha un nuovo metodo chiamato Distinct. Il secondo step è quello di aggiungre al prototype della classe Array la funzione esattamente come facciamo con JavaScript nativo.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Creare gruppi di client per Event Grid MQTT
Utilizzare i primary constructor di C# per inizializzare le proprietà
Creazione di plugin per Tailwind CSS: espandere le funzionalità del framework dinamicamente
Eseguire query verso tipi non mappati in Entity Framework Core
Creare alias per tipi generici e tuple in C#
Gestire errori funzionali tramite exception in ASP.NET Core Web API
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Effettuare il binding di date in Blazor
Filtrare i dati di una QuickGrid in Blazor con una drop down list
C# 12: Cosa c'è di nuovo e interessante
Gestire la cancellazione di una richiesta in streaming da Blazor
Modificare i metadati nell'head dell'HTML di una Blazor Web App