unknown

V lekci Základní typy jste poznali typ any, který kontrolu typů vypne: TypeScript dovolí cokoli a chyby z JavaScriptu jsou zpátky. Někdy ale opravdu nevíte, co je hodnota zač. Data, která přicházejí zvenku, třeba z uložené hry, ze souboru nebo ze zprávy ze serveru, mohou obsahovat cokoli: možná číslo, které čekáte, možná text, možná vůbec nic.

Pro takové hodnoty má TypeScript typ unknown (anglicky „neznámý“). Stejně jako any přijme jakoukoli hodnotu. Na rozdíl od any vám ale s hodnotou nedovolí nic dělat, dokud nezjistíte, co je zač:

const ulozeneJmeno: unknown = "Kira";
console.log(ulozeneJmeno);
console.log(ulozeneJmeno.toUpperCase());
main.ts(3,13): error TS18046: 'ulozeneJmeno' is of type 'unknown'.

Vypsat hodnotu jde, protože console.log přijme cokoli. Zavolat metodu ale nejde: hodnota může být číslo a program by pak spadl. Hodnotu typu unknown nemůžete uložit ani do proměnné jiného typu: const jmenoHrdiny: string = ulozeneJmeno; skončí chybou error TS2322: Type 'unknown' is not assignable to type 'string'.

K hodnotě se dostanete zúžením, kontrolami, které už znáte:

const ulozeneJmeno: unknown = "Kira";

if (typeof ulozeneJmeno === "string") {
    console.log(ulozeneJmeno.toUpperCase());
} else {
    console.log("Uložená hra neobsahuje jméno");
}

Vypíše:

KIRA

Uvnitř if je ulozeneJmeno typu string a smíte s ním dělat všechno, co jde s texty. V tom je celý rozdíl mezi oběma typy. S any můžete na kontrolu zapomenout a program spadne, až poběží (s const ulozeneJmeno: any = 42; skončí volání chybou TypeError: ulozeneJmeno.toUpperCase is not a function). S unknown zapomenout nemůžete: TypeScript kontrolu vyžaduje.

Když tedy typ hodnoty neznáte, napište unknown, ne any. A když v programu uvidíte any, zeptejte se, jestli by nestačil skutečný typ, nebo aspoň unknown.

Pokyny

Program vypíše 130, 4510, 10 a 11. Druhé číslo je špatně: uložené zlato byl text "45" a "45" + 10 dá text "4510". Typ any tenhle problém zakryl. Změňte typ parametru ulozeno na unknown a TypeScript ohlásí return. Opravte funkci: když je ulozeno číslo, vraťte ho; jinak zatím vraťte 0. Program pak vypíše 130 a třikrát 10.

Přidejte ještě jednu kontrolu: když je ulozeno text, vraťte Number(ulozeno). Program pak vypíše:

130
55
10
10

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

8/10