Этот код не компилируется для меня (как правило, вы должны опубликовать Минимальный, Полный и Проверяемый пример , чтобы получить лучшую помощь). Редактировать: спасибо за обновление вашего кода.
Я бы сказал, что ваша проблема в том, что terrain
расширяется до string
, потому что вы используете let
для его объявления.Поскольку переменные, объявленные с помощью let
, могут изменять свое значение, обычно вы не скажете let terrain = "Plains"
, если не планируете изменить значение terrain
позже.Таким образом, компилятор делает вывод, что terrain
равно string
.Если вам не нравится этот вывод, вы можете сказать компилятору, что он keyof TERR_CREATE
так:
let terrain: keyof TERR_CREATE = "Plains";
Посмотрите его на игровой площадке
И затемостальное должно работать.Или, если вы никогда не захотите изменить значение terrain
, вы можете использовать объявление const
, которое TypeScript выведет как самый узкий тип (в данном случае строковый литерал):
const terrain = "Plains"; // inferred as string literal "Plains"
Посмотри на игровую площадку
, а остальное должно сработать.
Надеюсь, это поможет.Удачи.