Never Type
Never
Дизайн мови програмування дійсно має концепцію низького типу, що є natural результатом, щойно ви виконуєте code flow analysis, тому йому потрібно надійно представляти те, що може ніколи не статися.
Тип never
використовується в TypeScript для позначення цього bottom Випадки, коли це відбувається природним шляхом:
Функція ніколи не повертає керування (наприклад, якщо тіло функції має
while(true){}
)Функція завжди видає помилку (наприклад, у
function foo(){throw new Error('Not Implemented')}
тип поверненняfoo
-never
)
Звичайно, ви також можете використовувати цю анотацію самостійно
Однак тільки never
може бути значення іншого never.
Чудово Тепер давайте просто перейдемо до його ключового випадку використання :)
Use case: Exhaustive Checks
Ви можете викликати функції never у контексті never.
А оскільки never
можна призначити лише іншому never
, ви також можете використовувати його для compile time вичерпних перевірок. Це описано в розділі discriminated union section.
Confusion with void
void
Як тільки хтось скаже вам, що never
повертається, коли функція ніколи не виходить витончено, ви інтуїтивно хочете думати про це як про те саме, що void
. Однак void
є істотою. never
є завжди неіснуючим.
Функція, яка повертає нічого, повертає Unit void
. Однак функція, яка ніколи не повертає (або завжди викидає), повертає never
. void
— це те, що можна призначити (без strictNullChecking
), але never
не можна ніколи призначити нічого іншого, крім never
.
Type inference in never returning functions
Для оголошень функцій TypeScript за замовчуванням визначає void
, як показано нижче:
Звичайно, ви можете виправити це за допомогою явної анотації:
Основною причиною є сумісність зворотного слова з реальним кодом JavaScript:
If Base.overrideMe
.
Реальний TypeScript може подолати це за допомогою
abstract
функцій, але цей висновок підтримується для сумісності.
Last updated