W TypeScript możliwe jest podanie wielu możliwych typów zamiast jednego – służy do tego unia typów:
const convertToString = function(a: number | boolean | string): string{
return a.toString();
}
convertToString(34);
convertToString(false);
convertToString('test');
W takim przypadku wszystkie typy współdzielą metodę toString(), stąd można bez uprzedniego sprawdzania typu wywołać tą metodą na argumencie metody. W inny wypadku konieczne jest sprawdzanie typu:
const convertToNumber = function(a: number | boolean): number{
if(typeof a === 'number'){
return a;
} else if(typeof a === 'boolean'){
if(a === true){
return 1;
} else if(a === false){
return 0;
}
}
throw Error('Can not convert to a number');
}
convertToNumber(34);
convertToNumber(false);
* Oczywiście da się uprościć tą funkcję – zamiast odczytywać typ boolean, można od razu użyć operatora ===. Lecz dla prostoty przykładu została zrealizowana w ten sposób.
Ograniczenie do konkretnych wartości
Ciekawym rozwiązaniem jest ograniczenie za pomocą unii wartości, które mogą zostać zwrócone:
const answer = function(text: 'yes' | 'no'):void {
console.log(text);
}
answer('no');
answer('yes');
//answer('notAllowed');
W powyższym przykładzie do metody answer można przekazać jedynie ciągi znaków no oraz yes.