如何在寓言中做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土地工作。我试图将其转换为寓言,但任我可以得到它有一个绝对的存在是为了.spread
或props[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))