为什么在这个对象类型交集的结果中,`constructor` 属性 的类型与 `Function` 相交?

Why, in the result of this object type intersection, is the type of the `constructor` property intersected with `Function`?

如果我执行这种类型的交集:

{ constructor: 'FooConstructor', value1: boolean } & { value2: number };

结果类型是这样的:

{ constructor: 'FooConstructor' & Function, value1: boolean, value2: number };

(Playground example)

为什么生成的 constructor 属性 的类型与 Function 相交?

这是因为:

  • 类型 { constructor: 'FooConstructor', value1: boolean } & { value2: number }object 的子类型,因为每个对象类型都是。
  • 类型 object['constructor']Function

那是因为 Javascript do 中的对象有一个名为 constructor 的 属性,它指的是用于构造它们的函数:

> let obj = {};
> obj.constructor
ƒ Object() { [native code] }

我建议使用 属性 名称,例如 constructor_constructorName,因为 constructor 是指实际的构造函数。