我在使用流输入代码时出现问题。我想要实现的是一个深度冻结和对象的递归函数。我有以下实现:
const isObject: (any => boolean) = object => (
object !== null && typeof object === 'object'
)
type TObject = Object | any[]
export const deepFreeze: (TObject => TObject) = object => {
// Actually this doesn't need to be fixed, because an array is an object and
// it's properties can thus be enumerated.
// $FlowFixMe
const ownPropNames = Object.getOwnPropertyNames(object)
each(ownPropNames, name => {
const prop = object[name]
if (isObject(prop)) deepFreeze(prop)
})
return Object.freeze(object)
}
此代码适用于对象和数组(技术上也是对象)。但是流量不会接受它,甚至没有$FlowFixMe
评论。 Flow说明如下:
我想这是因为Object.getOwnPropertyNames
被输入只接受对象,因为如果我用空对象而不是我的变量来调用它,那么错误就会消失。如果我用TObject
替换Object
,它们也会消失,但当然我不能用数组调用该函数。所以
建议将不胜感激。