如何在寓言中做foo [bar](部分动态属性访问)?

问题描述:

我有一个相当简单的JavaScript方法如何在寓言中做foo [bar](部分动态属性访问)?

(props,propName,componentName) => { 
    var value = props[propName]; 
    const getOrSpread = name => 
     props[name] || props.spread && props.spread[name]; 
    // remainder of function code omitted 
} 

是在JavaScript土地工作。我试图将其转换为寓言,但任我可以得到它有一个绝对的存在是为了.spreadprops[propName]动态访问但不能同时

module JsxHelpers = 
    type IReactProps = 
     abstract member spread : obj 


let isfuncOrNullPropType (props:IReactProps) (propName:string) componentName = 
     let propsO :obj = box props 
     let value:obj = propsO?propName 

     let valueAttempt2:obj = (box props)?(propName) 
     // rest of translation not attempted yet 
     value 
其中,如果道具被定义为IReactProps,然后

属性访问.spread作品,但两个可能的let value lines编译。 或道具被定义为obj,它说'这个表达预计将有型“的obj”,但在这里有型“” A - > OBJ”

即使从文档的简单对象不会出现编译:

let isfuncOrNullPropType (props:obj) (propName:string) = 
    let value2:obj = props?propName 
    value2 

使用"fable-core": "^1.0.0-narumi-905"

你一定要根据文件把道具名称在括号中。你得到的编译器错误是因为props?(propName)返回类型'a -> obj。显然,动态(?)运算符返回Applicable,并从寓言来源:

/// DO NOT USE: Internal type for Fable dynamic operations 
type Applicable = obj->obj 

也许尝试:

let value : obj = unbox<obj> (props?(propName))