Выражение типа any не может использоваться для индексации типа

Обновлено: 21.11.2024

Элемент неявно имеет тип 'any', потому что выражение типа 'string' нельзя использовать для индексации типа '» . Нет подписи индекса с параметром типа 'строка' для типа '» .

Я пытался повсюду просматривать документы TypeScript, но как, черт возьми, я должен interface это сделать, чтобы он мог принять color[e] ?

test 10 Авг 2019 в 02:35

2 ответа

Лучший ответ

Проблема не в том, что color неправильный тип, а в том, что TypeScript выводит тип ['red', 'green', 'blue'] как string[] . Часто такой тип вывода желателен, поскольку (для всех, кто знает компилятор) вы можете захотеть вставить 'purple' в него. Но в этом случае вы бы хотели, чтобы компилятор знал, что единственными членами являются три строковых литерала 'red' , 'green' и 'blue' . То есть вам нужен тип, по крайней мере, такой же специфичный, как Array<'red'|'green'|'blue'> .

Предполагая, что вы используете TS3.4 или новее, самый простой способ получить этот тип вывода типа из компилятора - это использовать const утверждение:

Хорошо, надеюсь, это поможет. Удачи!

jcalz 10 Авг 2019 в 01:23

Вы можете объявить colors как any , чтобы дать TypeScript указание отойти от этого вопроса (он же явно любой ):

Но если это возможно, предпочтительнее строгая типизация:

Подробнее об индексировании в TypeScript: Подписи индекса

РЕДАКТИРОВАТЬ: В этом ответе на похожий вопрос автор предлагает использовать > - если это соответствует вашему варианту использования.

Читайте также: