TypeScript – unia typów

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.