71 TS – Typed Functions
Facciamo un breve riepilogo sulle funzioni di JavaScript.
Esempio di funzione classica con il costrutto function che può restituire un valore o un undefined
function myFunction() { }
oppure possiamo assegnare una funzione in una variabile
let myFunc = function() { } myFunc();
Con myFunc() richiamo la funzione.
Altro tipo sono le arrow function
let myArrowFunc = (e) => { console.log(e) }
Passando a TypeScript, possiamo definire il tipo di parametro
let myArrowFunc = (e : any) => { console.log(e) } myArrowFunc('test');
Con un solo parametro posso evitare le graffe, ecco un esempio con il tipo number che raddoppia il valore
let myArrowFunc = (e : number) => e*2 console.log(myArrowFunc(3));
come visto abbiamo indicato che è di tipo number, se passassimo una stringa riceveremmo un errore.
Oltre a verificare i membri di una funzione, TypeScript ci permette di assegnare il tipo di dato anche al ritorno.
let myArrowFunc = (e : number) : number => e*2 console.log(myArrowFunc(3));
in questo caso, oltre che il parametro passato, anche il risultato restituito deve essere un numero.
Questa opzione non sarebbe accettata
let myArrowFunc = (e : number) : number => e*2+'ciao' console.log(myArrowFunc(3));
Riassumendo, possiamo creare una funzione col classico function e specificare i tipi di parametri anche diversi tra loro e poi specificare il tipo di ritorno che vogliamo, cioè di qualunque tipo
function func(x: string, y: number) : void { }
per esempio posso anche assegnare ad una variabile una funzione con dei tipi di parametri che ritorna vuota
let myVar : (x: string, y: number) : void;
Non è necessario rispettare il nome dei parametri, ma il tipo, infatti è ammesso dire che
myVar = func;
i tipi di dato sono rispettati, diversamente se in func avessi 2 parametri number
function func(x: number, y: number) : void { }
verrebbe generato un errore all’uguaglianza tra myVar e func
function func(x: string, y: number) : void { console.log('I am func') } let myVar : (x: string, y: number) : void; myVar = func; func('test', 4);
eseguendo non ottengo nessun errore, ma otterrò in output I am func. Come detto posso cambiare i nomi dei parametri rispettando il tipo
let myVar = function(name: string, age: number) : void { console.log(name + 'is' + age + 'years old'); }
Nessun errore nonostante i diversi nomi dei parametri ( name != x).
Questo tipizzazione non è possibile in JavaScript possiamo tipificare le funzione sia che utilizziamo una arrow function, sia che utilizziamo la forma classica con function, specificare il tipo di parametro fra tutti quelli che abbiamo visto e ogni funzione potrà ritornare qualsiasi tipo di valore noi dichiariamo. Oppure posso creare una variabile che riceva una funzione con specifici tipi di dati che scelgo a priori. Posso assegnare al volo un’altra funzione purché rispetti il tipo di dati, non i nomi.