Length of Tuple
Завдання
Потрібно створити дженерик-тип Length
, що поверне довжину заданого кортежу.
До прикладу:
type tesla = ["tesla", "model 3", "model X", "model Y"];
type spaceX = [
"FALCON 9",
"FALCON HEAVY",
"DRAGON",
"STARSHIP",
"HUMAN SPACEFLIGHT",
];
type teslaLength = Length<tesla>; // expected 4
type spaceXLength = Length<spaceX>; // expected 5
Розв’язок
Ми знаємо, що можна використати властивість length
для доступу до довжини
масиву в JavaScript. Того ж можна досягти в типах:
type Length<T extends any> = T["length"];
Проте, якщо зробити так, ми отримаємо помилку компіляції “Type ‘length’ cannot be used to index type ‘T’.”. Тож, треба дати TypeScript підказку, вказавши, що наш вхідний тип має таку властивість:
type Length<T extends { length: number }> = T["length"];
Коментарі