我想知道如何在Flow中将Object
转换为用户定义的确切类型。例如:
//@flow
type exactType = {|x : number|}
function test(a : Object) : exactType {
if(typeof(a.x) === 'string'){
return (a : exactType);
}
throw new Error('Incorrect type!')
}
甚至可以编写这样的功能吗?即是否可以为类型检查器提供参数a
只有一个名为x
的字段为number
的字段?
答案 0 :(得分:3)
没有安全的方法可以做到这一点。但是,您始终可以通过any
来绕过类型检查程序:
return ((a: any): exactType);
理想情况下,您会重构代码以避免使用Object
,因为它是一种不安全的类型。但是,如果那是不可能的,那么你能做的最好的就是小心翼翼地绕过这样的类型搜索器。