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对象常量”。我知道这是一个对象文字,实际上与空对象的“精确对象类型”不匹配。
我不明白的是为什么它不精确。在运行时它是一个空对象,这似乎很准确。有人可以在这里解释逻辑和/或如何指定err是Error一个空对象还是一个空对象?
尝试使用$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)