寓言文档Pojo属性

时间:2017-02-09 13:16:11

标签: javascript fable-f#

那里有[<Pojo>]应该做什么的文件吗?我得到了redux样本,并认为它解开了歧视的工会。问题是我将动作定义为一个有区别的联合,但是redux不允许除了一个对象文字之外的任何东西作为动作传递,因此一个有区别的联合不能成为动作。

以下类型

[<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,那是行不通的,因为一个动作只能是一个对象文字(具有“type”属性)

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

有这样的事吗?

在根源目录中使用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()

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

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

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

如果您收到以下错误:

  

错误FSHARP:未定义“Pojo”类型

请确保导入Fable.core.dll并将其打开:

#r "./node_modules/fable-core/Fable.Core.dll"
open Fable.Core

1 个答案:

答案 0 :(得分:0)

我最近发现的最好的指南之一是 F# Interop with Javascript in Fable: The Complete Guide by Zaid Ajaj

顺便说一下,属性 #include <iostream> template <typename T> class SmartPointer { private: T * ptr; public: template <typename... Args> explicit SmartPointer (Args && ... args) : ptr{ new T{ std::forward<Args>(args)... } } { } ~SmartPointer () { delete(ptr); } T & operator* () { return *ptr; } T * operator-> () { return ptr; } }; int main () { SmartPointer<int> intSP1; // OK //SmartPointer<int> intSP2(); // Error: vexing parse SmartPointer<int> intSP3{}; // OK SmartPointer<int> intSP4{5}; // OK SmartPointer<int> intSP5(5); // OK (no more vexing parse) } 适用于 F# 记录并确保它们编译为 javascript 对象文字(Plain Old Javascript Object)。显然,转换到这样的对象并不是记录的默认行为,这看起来很奇怪。