Вы создали интерфейс, у которого нет свойства «options». Затем вы устанавливаете свой тип «Поле» равным этому интерфейсу (или потенциально равному другому интерфейсу, у которого есть свойство «options»).
Затем вы пытаетесь вызвать свойство «options», которое может существовать или не существовать. Вот почему вы получаете ошибку ts при компиляции.
Переключение типа возврата на «any» работает, потому что компилятор не будет пытаться угадать тип возвращаемого вами объекта (поэтому вполне вероятно, что «options» будет допустимым свойством и, следовательно, не должно вызывать ошибки).
Если вы собираетесь вызывать свойство «options» для типа «Field», вы должны убедиться, что оно существует, прежде чем пытаться скомпилировать скрипт ts.
Возможно, лучше изменить ваши методы на «getSelectField» и «getNumberField» .... но, конечно, есть несколько способов, которыми вы можете справиться с этим.
TypeLib также важны, если Вы когда-нибудь хотите переместить COM-компоненты в управляемый код в будущем. Или имейте управляемый код, взаимодействуют с COM-компонентами.
С typelib существует много инструментов, которые автоволшебно переведут Ваши подписи COM в интерфейсы .NET и типы. Это может быть сделано вручную, но с крупным проектом это - конечно, огромное средство экономии времени.
Это действительно зависит от клиентов компонента, я думал бы.