TypeScript ошибка Type string is not assignable to type never как исправить
Рейтинг: 67.3% · 39 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
TypeScript ошибка Type string is not assignable to type never как исправить
Застрял на непонятной ошибке TypeScript. Есть объект с ключами, делаю динамический доступ через переменную — и получаю 'Type string is not assignable to type never'. Код примерно такой: const key = someCondition ? 'foo' : 'bar'; obj[key] = value; Obj типизирован как Record с конкретными ключами. В чём вообще проблема и как правильно это фиксить?
✔ Лучший ответ выбран автором и совпадает с автоматическим подбором — 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 как исправить
✔ Лучший ответ — выбран автором и совпадает с авто-подбором
Классика. Проблема в том, что TypeScript выводит тип key как string (широкий тип), а твой объект принимает только конкретные литеральные ключи. Когда TS пересекает string с допустимыми ключами объекта — получается never. Быстрое решение: явно типизировать key. Если у тебя есть тип объекта MyObj, делай так: const key: keyof MyObj = someCondition ? 'foo' : 'bar'. Тогда TS знает что key — один из допустимых ключей.
Re: TypeScript ошибка Type string is not assignable to type never как исправить
Добавлю к предыдущему ответу — ещё частая причина такой ошибки это когда у объекта разные типы значений для разных ключей, например { foo: string, bar: number }. Тогда obj[key] имеет тип string | number, а присваиваешь ты string — и для поля bar это невалидно. TypeScript именно поэтому и ругается. Тут нужно либо разделять логику по ключам через if/switch, либо использовать type assertion осторожно.
Re: TypeScript ошибка Type string is not assignable to type never как исправить
as keyof typeof obj спасает в 90% случаев в таких местах, но это не серебряная пуля — если ты промахнулся с ключом в рантайме, TS об этом не узнает. Правильнее сделать type guard или использовать Object.keys с проверкой. Но для быстрого фикса в простых случаях — нормально.
- cachego9376
- Сообщения: 22
- Зарегистрирован: Вт май 12, 2026 2:46 pm
Re: TypeScript ошибка Type string is not assignable to type never как исправить
Ещё вариант который часто упускают: если key приходит снаружи (из пропсов, из API) — используй функцию с дженериком. Что-то вроде function getValue<T, K extends keyof T>(obj: T, key: K): T[K] { return obj[key]; }. Это и типобезопасно, и не требует никаких приведений типов. Выглядит многословно но TS потом сам выводит всё корректно.
Re: TypeScript ошибка Type string is not assignable to type never как исправить
Надо было сразу включить strict: true в tsconfig и noImplicitAny — тогда такие проблемы всплывают раньше, на этапе написания, а не когда уже намешал логики. Если проект старый и strict не включён — это техдолг который рано или поздно аукнется.
- reactloop6971
- Сообщения: 3
- Зарегистрирован: Вт май 19, 2026 7:04 am
Поделиться темой:
✈ Telegram
VK
- Похожие темы
-
- TypeScript нативный компилятор на Go (tsc-go) — ждём 10x или рано радоваться?
10 ответов · 1007 просмотров
-
-
-
-
-
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость