Определение объектов так, как вы это сделали ({ aVariable: 2}
), не создает их экземпляры как myClass
объекты. Это проблема, поскольку aPrivateVariable
не создается, поскольку конструктор myClass
никогда не вызывается, а добавляемый вами объект не соответствует содержимому myClass
.
Как этот отрывок из справочника по машинописи о состояниях совместимости типов :
Закрытые и защищенные члены в классе влияют на их совместимость. Когда экземпляр класса проверяется на совместимость, если целевой тип содержит закрытый член, тогда тип источника также должен содержать закрытый член, происходящий из того же класса. Аналогично, то же самое относится к экземпляру с защищенным членом. Это позволяет классу быть совместимым по присваиванию со своим суперклассом, но не с классами из другой иерархии наследования, которые в остальном имеют одинаковую форму.
Один из способов справиться с этим - создать экземпляр каждого объекта, используя что-то вроде map()
const someVar: myClass[] = [2,3,1].map(num => myClass(num)) ;
Или, если вы уверены в форме объекта, вы можете использовать приведение типа:
let someVar: myClass[] = [] as myClass[]
Будьте осторожны с этим подходом, поскольку он не гарантирует, что то, что содержится в массиве, соответствует модели класса.