Атрибут басни документации 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). По-видимому, перевод в такой объект не является поведением по умолчанию для записей, что кажется странным.