【问题标题】:Why, in the result of this object type intersection, is the type of the `constructor` property intersected with `Function`?为什么在这个对象类型交集的结果中,`constructor` 属性的类型与`Function` 相交?
【发布时间】:2020-02-11 09:00:16
【问题描述】:

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

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

结果类型是这样的:

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

(Playground example)

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

【问题讨论】:

    标签: typescript types intersection object-type


    【解决方案1】:

    这是因为:

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

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

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

    我建议改用constructor_constructorName 之类的属性名称,因为constructor 是指实际的构造函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 2021-05-17
      • 2018-09-13
      相关资源
      最近更新 更多