Flow的文档说:When you create an object without any properties, you create an unsealed object type in Flow.
是否有可能创建一个没有属性的密封对象?
我的用例如下.我想初始化state
为一个空对象,并给状态以下类型:
type EmployeesViewState = {|
employeesRequest?: Request<Array<Employee>>,
geosRequest?: Request<Array<Geo>>,
|};
Run Code Online (Sandbox Code Playgroud)
我尝试分配空对象时得到的错误是
33: state: EmployeesViewState = {};
^^ object literal. Inexact type is incompatible with exact type
33: state: EmployeesViewState = {};
^^^^^^^^^^^^^^^^^^ exact type: object type
Run Code Online (Sandbox Code Playgroud)
当然,由于我还没有提供请求,我无法分配它们.我也无法分配undefined
给对象,因为状态是用管道定义的,即它是一个确切的类型.
我可以通过说法来欺骗流程,const a: any = {}; state = a;
但这看起来真的很笨拙.还有其他方法可以解决这个问题吗?
这肯定是Flow的疣之一.但是,它有一个相当简单的解决方法.只需通过您的对象Object.freeze
:
Object.freeze({})
当然,这只有在你不打算变异的情况下才有效,但我发现在这样的情况下,我很少想要.