switch
случаи эквивалентны ===
. Если бы они не были, это сработало бы:
switch ( 1 ) {
case '1':
console.log('hi')
}
Преобразование elementVal
в число не имело бы никакого значения. Ваша версия if/else
также функционально одинакова (хотя инструкции break
ничего не делают).
Вы создали интерфейс, у которого нет свойства «options». Затем вы устанавливаете свой тип «Поле» равным этому интерфейсу (или потенциально равному другому интерфейсу, у которого есть свойство «options»).
Затем вы пытаетесь вызвать свойство «options», которое может существовать или не существовать. Вот почему вы получаете ошибку ts при компиляции.
Переключение типа возврата на «any» работает, потому что компилятор не будет пытаться угадать тип возвращаемого вами объекта (поэтому вполне вероятно, что «options» будет допустимым свойством и, следовательно, не должно вызывать ошибки).
Если вы собираетесь вызывать свойство «options» для типа «Field», вы должны убедиться, что оно существует, прежде чем пытаться скомпилировать скрипт ts.
Возможно, лучше изменить ваши методы на «getSelectField» и «getNumberField» .... но, конечно, есть несколько способов, которыми вы можете справиться с этим.