N-tice
Někdy má pole pevný počet prvků a každé místo v něm má svůj význam: pozice na mapě je [x, y], předmět s počtem kusů je ["Šíp", 20]. Pro taková pole má TypeScript n-tice (anglicky tuple): typy, které vyjmenují typ každého prvku, a to v pořadí:
const pozice: [number, number] = [3, 5];
const sipy: [string, number] = ["Šíp", 20];
console.log(`${sipy[0]} x${sipy[1]} na pozici ${pozice[0]}, ${pozice[1]}`);Vypíše:
Šíp x20 na pozici 3, 5[string, number] znamená přesně dva prvky: nejdřív text, potom číslo. TypeScript zná typ každého z nich: sipy[0] je typu string a sipy[1] typu number. N-tici o dvou prvcích se říká také dvojice nebo pár.
N-tici musíte napsat jako anotaci, sám ji TypeScript neodvodí. Z [3, 5] samotného TypeScript odvodí number[], tedy pole čísel jakékoli délky. Z ["Šíp", 20] odvodí (string | number)[], pole jakékoli délky, jehož prvky mohou být texty nebo čísla v libovolném pořadí. (| znamená „nebo“; víc v lekci 5.)
Na pořadí záleží. Když jsou hodnoty prohozené, TypeScript ohlásí obě:
const lektvar: [string, number] = [2, "Léčivý lektvar"];main.ts(1,36): error TS2322: Type 'number' is not assignable to type 'string'.
main.ts(1,39): error TS2322: Type 'string' is not assignable to type 'number'.Pevná je i délka. Pár nemá třetí prvek, a proto TypeScript ohlásí, když se ho pokusíte přečíst:
const pozice: [number, number] = [3, 5];
console.log(pozice[2]);main.ts(2,20): error TS2493: Tuple type '[number, number]' of length '2' has no element at index '2'.V JavaScriptu by pozice[2] bylo potichu undefined. Když program běží, je n-tice obyčejné javascriptové pole a console.log(sipy) vypíše ["Šíp", 20]. Typ n-tice jen říká TypeScriptu, co má kontrolovat.
Typické chyby:
- Hodnota s prvkem navíc:
const sipy: [string, number] = ["Šíp", 20, 5];skončí hláškou na dvou řádcích:Type '[string, number, number]' is not assignable to type '[string, number]'.a pod níSource has 3 element(s) but target allows only 2.(hodnota má 3 prvky, ale typ jich dovoluje jen 2). Druhý řádek vysvětluje ten první. [number]místonumber[]:[number]je n-tice s právě jedním číslem,number[]pole s libovolným počtem čísel.
Jak psát:
Pokyny
Hodnoty v n-tici lektvary jsou v opačném pořadí. Prohoďte je, aby program vypsal:
Léčivý lektvar x2
Kira je na pozici 3, 5Dejte proměnné pozice typ n-tice [number, number].
Kira ujde dvě políčka na východ. Těsně před řádek, který vypisuje její pozici, přidejte příkaz, který k pozice[0] přičte 2, aby program vypsal:
Léčivý lektvar x2
Kira je na pozici 5, 5Začněte programovat zdarma
6/9