代码之家  ›  专栏  ›  技术社区  ›  fraxture

如何在流类型中指定空对象?

  •  5
  • fraxture  · 技术社区  · 6 年前

    假设我有一个变量,可以是javascript错误对象,也可以是空对象,如何在flow中指定空对象?

    我尝试过的一种可能性是在不同的地方(例如 here ),如下所示:

    const err: Error | {||} = {};
    

    但这会产生以下流错误:

    1: const exact: {||} = {};
                           ^ Cannot assign object literal to `exact` because inexact object literal [1] is incompatible with exact object type [2].
    References:
    1: const exact: {||} = {};
                           ^ [1]
    1: const exact: {||} = {};
                    ^ [2]
    

    it live here . 这个 || 符号显然是 $Exact<> 如前所述 here . 所以我不明白为什么会失败。

    它的意思是我试图分配给的空对象 err 是“不精确的对象文字”。我知道它是一个对象文本,实际上它与空对象的“精确对象类型”不匹配。

    我不明白的是为什么它是不精确的。在运行时,它似乎是一个空对象。有人能解释一下这里的逻辑吗和/或是如何可以指定 厄尔 不是 Error 还是空的东西?

    2 回复  |  直到 6 年前
        1
  •  5
  •   James Kraus    6 年前

    尝试使用 $Shape<T> 要指定没有属性的对象,请执行以下操作:

    ( Try )

    type errOrObj = Error | $Shape<{||}>
    
    const err: errOrObj = new Error("Blah")
    
    const emptyObj: errOrObj = {}
    
    const nonempty: errOrObj = {blah: 2} // Error