Атрибут басни документации Pojo

Есть ли документация для чего? [<Pojo>] должен делать? Я получил образец редукса и решил, что он разворачивает разрозненные союзы. Проблема заключалась в том, что у меня есть действие, определенное как дискриминируемый союз, но при редуксе не разрешается передавать в качестве действия ничего, кроме литерала объекта, поэтому дискриминируемый союз не может быть действием.

Итак, следующий тип

[<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"
});

Повезло ли это "случайность", что у литерала объекта есть свойство "тип" (это нужно в редуксе).

Без Пойо это было бы:

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()

но при взаимодействии с документами нет больше информации о том, что он делает. Я попытаюсь поиграть с ним немного больше и посмотреть, возможно ли использовать значение как объединение или оно уже развернуто.

Если создатель / вкладчик Fable случайно прочитает это; спасибо, это отличная идея, и я хотел бы внести свой вклад в случае необходимости.

Итак, вопрос в том, где находится документация, если такой вещи нет, то как ее создать? Я хотел бы написать кое-что, но буду только гадать, как работает большая часть компилятора fable.

Если вы получите следующую ошибку:

ошибка FSHARP: тип 'Pojo' не определен

Пожалуйста, убедитесь, что вы импортируете Fable.core.dll и откройте его:

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

1 ответ

Одним из лучших руководств, которые я недавно обнаружил, является F# Interop with Javascript in Fable: The Complete Guide от Zaid Ajaj.

Кстати, атрибут [< Pojo >], применим к записям F# и обеспечивает их компиляцию в литералы объектов javascript (обычный старый объект Javascript). По-видимому, перевод в такой объект не является поведением по умолчанию для записей, что кажется странным.

Другие вопросы по тегам