Object — динамический класс, и задаваемые Вами свойства динамические {intellect: Number, bravery: Number, leadership: Number}. То есть они непостоянны, могут во время исполнения вообще удаляться, могут добавляться другие. Компилятор не берет на себя ответственности за динамические свойства, он не может контролировать, что и как будет происходить в рантайме. Он не может проанализировать код на предмет, будет ли в данном месте кода у этого обжекта такое свойство или нет. Может быть, оно вообще добавляется обжекту или наоборот, удаляется из него, в обработчике нажатия на кнопку, например. То есть гарантировать его наличие компилятор не может в принципе, на то оно и динамическое. Поэтому никакого автокомплита. А вот с инициализацией по перечислению все прямо наоборот — перечисляются с for each только динамические свойства, а члены класса — нет. То есть Вы можете соединить два последних кода и заменить this на skills
