gpt4 book ai didi

f# - 从 F# Fable 调用 ES 3rd 方脚本方法

转载 作者:行者123 更新时间:2023-12-04 20:47:35 25 4
gpt4 key购买 nike

我试图让 Fable 正确编译以下代码,但我无法这样做:

module AppView
#r "../../../node_modules/fable-core/Fable.Core.dll"
open Fable.Core
open Fable.Import.Browser
open Fable.Core.JsInterop
[<Import("default", from="../../../js/3rd/riot.js")>]
module riot_js =
let mount:((string*obj)->array<obj>) = jsNative

type App
(
tagName:string
,state
,store
) =
member public x.AppTag =
(riot_js?mount ("app", state))
// does not compile: The value or constructor 'riot_js' is not defined.
// (riot_js.mount ("app", state))
// compiles wrongly to: riot_js.mount(["app", this.state]);

尝试 riot_js?mount 会神奇地导致 riot_js 不再存在并且尝试 riot_js.mount 编译成 riot_js.mount(["app", this .state]);.

Mount 不接受一个参数,而是接受 2 个参数,但它不会转译或转译错误。

现在我有一个看起来最奇怪的解决方案:

[<Emit("riot_js")>]
let riot_js (x: int): obj = jsNative
...
((riot_js 1)?mount ("app", state))

这将返回一个数组,但寓言再次不允许我以“正常”方式获取第一个元素:

((riot_js 1)?mount ("app", state))?[0]

[ 上显示红色,错误 Unexpected symbol '[' in expression。预期的标识符,“(”或其他标记。

((riot_js 1)?mount ("app", state)).[0]

在出现错误的所有内容上都显示红色 未定义字段、构造函数或成员“Item”。

下面的“作品”

((riot_js 1)?mount ("app", state))?``0``

并编译为:

riot_js.mount("app", this.state)["0"];

这不是某人可以获得的最佳结果。在打开 Fable 的 2 个问题之前,我会让这个问题搁置一段时间并设置赏金一周左右。

最佳答案

以下似乎编译到正确的 ES 并且不需要 ? 所以它将是强类型的。

open Fable.Core.JsInterop
type Riotjs =
{
mount:(System.Func<string,obj,string []>)
}
let riot = (importAll<obj> "../js/3rd/riot.js") :?> Riotjs
let app = riot.mount.Invoke("app",(createObj []))

我将初始状态设置为 obj 类型,但也可以使用强类型应用程序状态。

ES 生成的是:

export var app = riot.mount("app", {});

关于f# - 从 F# Fable 调用 ES 3rd 方脚本方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45768754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com