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

时间:2018-05-30 21:02:27

标签: javascript flowtype

假设我有一个可以是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的空对象是一个“不精确的对象文字”。我知道它是一个对象文字,实际上与空对象的“确切对象类型”不匹配。

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

2 个答案:

答案 0 :(得分:4)

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

Try

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

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

const emptyObj: errOrObj = {}

const nonempty: errOrObj = {blah: 2} // Error

答案 1 :(得分:0)