Это потому, что:
- Тип
{ constructor: 'FooConstructor', value1: boolean } & { value2: number }
является подтипом object
, поскольку каждый тип объекта имеет вид. - Тип
object['constructor']
равен Function
.
И это потому, что объекты в Javascript do имеют свойство с именем constructor
, которое ссылается на функцию, используемую для их построения:
> let obj = {};
> obj.constructor
ƒ Object() { [native code] }
Я предлагаю вместо этого использовать имя свойства, например constructor_
или constructorName
, поскольку constructor
предназначено для ссылки на фактический конструктор.