Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що робить NonNullable<T>?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**`NonNullable<T>`** - це утилітний тип, який прибирає `null` і `undefined` з типу `T`: якщо `T` є `null` або `undefined`, результат - `never`, інакше повертається сам `T`. **Ключове:** він реалізований як умовний тип `T extends null | undefined ? never : T` і використовується для безпечного звернення до значень після перевірки на `null`/`undefined`.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення### Визначення У стандартній бібліотеці він реалізований так: ```javascript type NonNullable<T> = T extends null | undefined ? never : T; ``` Тобто: якщо `T` - `null` або `undefined`, результат `never`; інакше повертається сам `T`. --- ### Приклади використання ```javascript type A = NonNullable<string | null | undefined>; // string type B = NonNullable<number | undefined>; // number type C = NonNullable<null | undefined>; // never type D = NonNullable<string | null>; // string ``` --- ### Практичне застосування 1. **Безпечне звернення до значень після перевірки:** ```javascript function getLength(value: string | null) { if (value) { let safe: NonNullable<typeof value> = value; // тепер точно string return safe.length; } return 0; } ``` 2. **Типізація API-відповідей після фільтрації null:** ```javascript const users = [ "Tom", null, "Bob" ]; const valid = users.filter(Boolean) as NonNullable<typeof users[number]>[]; // valid: string[] ``` 3. **У поєднанні з іншими utility-типами:** ```javascript type User = { name?: string | null }; type SafeUser = NonNullable<User["name"]>; // string ``` --- ### Коротко | Utility | Призначення | |---|---| | `NonNullable<T>` | Прибирає `null` і `undefined` | | `Partial<T>` | Робить усі поля опціональними | | `Required<T>` | Робить усі поля обов'язковими | | `Readonly<T>` | Робить усі поля тільки для читання | | `Extract<T, U>` | Залишає перетин типів | | `Exclude<T, U>` | Прибирає перетин типів |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.