TypeScript ошибка Type string is not assignable to type never как исправить

Рейтинг: 67.3% · 39 голосов
Frontend и backend разработка: JavaScript, TypeScript, React, Next.js, Vue, Node.js, PHP, REST и GraphQL API, вёрстка HTML/CSS и современные веб-приложения.
Ответить
Аватара пользователя
ivan1999
Сообщения: 7
Зарегистрирован: Пт май 15, 2026 5:53 am

TypeScript ошибка Type string is not assignable to type never как исправить

Сообщение ivan1999 »

Застрял на непонятной ошибке TypeScript. Есть объект с ключами, делаю динамический доступ через переменную — и получаю 'Type string is not assignable to type never'. Код примерно такой: const key = someCondition ? 'foo' : 'bar'; obj[key] = value; Obj типизирован как Record с конкретными ключами. В чём вообще проблема и как правильно это фиксить?
👍1 ❤️1 🔥3 😄1 🤔
✔ Лучший ответ выбран автором и совпадает с автоматическим подбором — secproxy7089
Классика. Проблема в том, что TypeScript выводит тип key как string (широкий тип), а твой объект принимает только конкретные литеральные ключи. Когда TS пересекает string с допустимыми ключами объекта — получается never. Быстрое решение: явно типизировать key. Если у тебя есть тип объекта MyObj, делай так: const key: keyof MyObj = someCondition ? 'foo' : 'bar'. Тогда TS знает что key — один из до…
Перейти к ответу →
Аватара пользователя
secproxy7089
Сообщения: 20
Зарегистрирован: Чт май 14, 2026 5:48 am

Re: TypeScript ошибка Type string is not assignable to type never как исправить

Сообщение secproxy7089 »

✔ Лучший ответ — выбран автором и совпадает с авто-подбором
Классика. Проблема в том, что TypeScript выводит тип key как string (широкий тип), а твой объект принимает только конкретные литеральные ключи. Когда TS пересекает string с допустимыми ключами объекта — получается never. Быстрое решение: явно типизировать key. Если у тебя есть тип объекта MyObj, делай так: const key: keyof MyObj = someCondition ? 'foo' : 'bar'. Тогда TS знает что key — один из допустимых ключей.
👍 ❤️1 🔥2 😄 🤔
Аватара пользователя
luka_lab
Сообщения: 5
Зарегистрирован: Вт май 12, 2026 10:11 pm

Re: TypeScript ошибка Type string is not assignable to type never как исправить

Сообщение luka_lab »

Добавлю к предыдущему ответу — ещё частая причина такой ошибки это когда у объекта разные типы значений для разных ключей, например { foo: string, bar: number }. Тогда obj[key] имеет тип string | number, а присваиваешь ты string — и для поля bar это невалидно. TypeScript именно поэтому и ругается. Тут нужно либо разделять логику по ключам через if/switch, либо использовать type assertion осторожно.
👍1 ❤️1 🔥2 😄2 🤔
Аватара пользователя
ivan3622
Сообщения: 4
Зарегистрирован: Пн май 11, 2026 4:56 pm

Re: TypeScript ошибка Type string is not assignable to type never как исправить

Сообщение ivan3622 »

as keyof typeof obj спасает в 90% случаев в таких местах, но это не серебряная пуля — если ты промахнулся с ключом в рантайме, TS об этом не узнает. Правильнее сделать type guard или использовать Object.keys с проверкой. Но для быстрого фикса в простых случаях — нормально.
👍1 ❤️ 🔥 😄 🤔
Аватара пользователя
cachego9376
Сообщения: 22
Зарегистрирован: Вт май 12, 2026 2:46 pm

Re: TypeScript ошибка Type string is not assignable to type never как исправить

Сообщение cachego9376 »

Ещё вариант который часто упускают: если key приходит снаружи (из пропсов, из API) — используй функцию с дженериком. Что-то вроде function getValue<T, K extends keyof T>(obj: T, key: K): T[K] { return obj[key]; }. Это и типобезопасно, и не требует никаких приведений типов. Выглядит многословно но TS потом сам выводит всё корректно.
👍3 ❤️ 🔥 😄1 🤔
Аватара пользователя
sasha_ml
Сообщения: 3
Зарегистрирован: Вт май 19, 2026 10:51 am

Re: TypeScript ошибка Type string is not assignable to type never как исправить

Сообщение sasha_ml »

Надо было сразу включить strict: true в tsconfig и noImplicitAny — тогда такие проблемы всплывают раньше, на этапе написания, а не когда уже намешал логики. Если проект старый и strict не включён — это техдолг который рано или поздно аукнется.
👍5 ❤️1 🔥2 😄 🤔2
Аватара пользователя
reactloop6971
Сообщения: 3
Зарегистрирован: Вт май 19, 2026 7:04 am

Re: TypeScript ошибка Type string is not assignable to type never как исправить

Сообщение reactloop6971 »

Спасибо всем! Решил через keyof typeof obj, стало чисто. Заодно разобрался почему так работает — теперь понятно.
👍1 ❤️ 🔥2 😄 🤔
Ответить
Поделиться темой: ✈ Telegram VK

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость