有没有关于什么的文档 [<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/