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
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
Ottimizzazione dei block template in Angular 17
Garantire la provenienza e l'integrità degli artefatti prodotti su GitHub
Utilizzare il trigger SQL con le Azure Function
Applicare un filtro per recuperare alcune issue di GitHub
Fornire parametri ad un Web component HTML
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Implementare l'infinite scroll con QuickGrid in Blazor Server
Effettuare il refresh dei dati di una QuickGrid di Blazor
Utilizzare WhenEach per processare i risultati di una lista di task
Usare il colore CSS per migliorare lo stile della pagina
Utilizzare gRPC su App Service di Azure
I più letti di oggi
- Recuperare l'ultima versione di una release di GitHub
- Rendere i propri workflow e le GitHub Action utilizzate più sicure
- Disabilitare le run concorrenti di una pipeline di Azure DevOps
- Gestione dei nomi con le regole @layer in CSS
- Introduzione alle Container Queries in CSS
- Fornire parametri ad un Web component HTML
- Visual Studio Live: what's next - Online
- .NET Conference Italia 2021 - Online
- ASP.NET MVC Release Candidate 2