如何在Flow类型中指定一个空对象?

fra*_*ure 6 javascript flowtype

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

我尝试过在各种地方(例如here)看到的一种可能性如下所示:

const err: Error | {||} = {};
Run Code Online (Sandbox Code Playgroud)

但这会产生以下流错误:

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]
Run Code Online (Sandbox Code Playgroud)

看到它住在这里。该||符号显然$Exact<>这里所述的简写形式。所以我看不出为什么这确实失败了。

这是说我要分配给的空对象err是“ inexact对象常量”。我知道这是一个对象文字,实际上与空对象的“精确对象类型”不匹配。

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

Jam*_*aus 5

尝试使用$Shape<T>指定没有属性的对象:

尝试

type errOrObj = Error | $Shape<{||}>

const err: errOrObj = new Error("Blah")

const emptyObj: errOrObj = {}

const nonempty: errOrObj = {blah: 2} // Error
Run Code Online (Sandbox Code Playgroud)