功能与{}
类型兼容:
/* @flow */
const a = { 'foo': {} }
const b = () => true;
(a: {[string]: {} }); // No errors! Cool, I like it
(b: {[string]: {} }); // No errors! Not cool, I don't want functions to pass validation
是否有可能以某种方式排除函数但允许字典?
答案 0 :(得分:1)
这是有效的,因为函数在技术上是有效的对象。但是,你可以通过一些黑客来解决这个问题:设置一个可选属性$call
并给它一个empty
类型:
/* @flow */
const a = { 'foo': {} }
const b = () => true;
(a: { $call?: empty, [string]: {} }); // No errors! Cool, I like it
(b: { $call?: empty, [string]: {} }); // Errors, woohoo!
由于Flow的函数内部定义,这是有效的。为了解释,我将展示如何通过赋予$call
属性将对象分配给函数类型:
/* @flow */
const obj = { $call: () => { console.log('wat'); } };
(obj: Function) // No errors