javascript - 寓言文档 Pojo 属性

标签 javascript fable-f#

有没有关于什么的文档 [<Pojo>]应该怎么办?我得到了 redux 示例,并认为它可以解开受歧视的联合。问题是我将 Action 定义为可区分的联合,但 redux 不允许将对象文字以外的任何内容作为 Action 传递,因此可区分的联合不能是 Action 。

所以下面的类型

[<Pojo>]
type TodoAction =
    | EditTodo of id:int * text:string
    | ClearCompleted

console.log(EditTodo(22,"Hello World"))
console.log(ClearCompleted)

编译为:
console.log({
  type: "EditTodo",
  id: 22,
  text: "Hello World"
});
console.log({
  type: "ClearCompleted"
});

对象字面量具有“类型”属性(您在 redux 中需要它)是幸运的“意外”吗?

如果没有 Pojo,它将是:
console.log(new TodoAction("EditTodo", [22, "Hello World"]));
console.log(new TodoAction("ClearCompleted", []));

如果您尝试 store.dispatch ,那将不起作用,因为操作只能是对象文字(具有“类型”属性)

因此,尝试从一个工作示例进行逆向工程很有趣,但拥有一份说明它应该如何工作的文档更有趣。

有这样的事情吗?

在源码根目录下使用grep得到如下文件:./src/fable/Fable.Core/Fable.Core.fs

和:
/// Compile a record as a JS object literals.
/// More info: http://fable.io/docs/interacting.html
type PojoAttribute() =
    inherit Attribute()

但是文档交互没有关于它做什么的更多信息。我将尝试更多地使用它,看看是否可以将该值用作联合或它是否已经展开。

如果 Fable 的创建者/贡献者碰巧读到了这个;谢谢,这是个好主意,如果需要,我很乐意做出贡献。

所以问题是:如果没有这样的东西,文档在哪里,那么我们如何创建它?我很想写一些,但只能猜测大多数寓言编译器是如何工作的。

如果您收到以下错误:

error FSHARP: The type 'Pojo' is not defined



请确保您导入 Fable.core.dll 并打开它:
#r "./node_modules/fable-core/Fable.Core.dll"
open Fable.Core

最佳答案

我最近发现的最好的指南之一是 F# Interop with Javascript in Fable: The Complete Guide by Zaid Ajaj .
顺便说一下,属性,[< Pojo >] , 适用于 F# 记录并确保它们编译为 javascript 对象文字(Plain Old Javascript Object)。显然,转换到这样的对象不是记录的默认行为,这看起来很奇怪。

关于javascript - 寓言文档 Pojo 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42137768/

相关文章:

javascript - 更改图像的部分 URL 字符串

javascript - React hook 单元测试

javascript - 使用 Fable 获取文件输入内容

f# - 寓言实现外部接口(interface)编译错误

f# - 如何使用 Fable (F#) 进行 base64 编码?

drop-down-menu - 如何在 Fable Elmish 的下拉菜单中设置默认值?

javascript - 相当于此 Raphael.js 图表演示的 Highcharts——可能吗?

javascript - ckeditor 将 html 内容显示为纯文本

javascript - 为什么 3 > 2 > 1 返回 false 而 1 < 2 < 3 返回 true?

javascript - 如何通过 Fable 将 F# 模块的公共(public)函数公开给 Javascript?