Я не уверен, нашел ли я ошибку в интерфейсе / компиляторе из Fable или неправильно использовал тип system / externs.
Сегодня я получил очень расстраивающую ошибку. Как обычно, я набирал externs для небольших функций, написанных в JS, и одна из них возвращала список объектов из базы данных NO SQL. Видимо басня получила объект хорошо. Однако когда я попытался преобразовать объект, код умер без каких-либо ошибок или объяснений непоследовательным образом.
Поскольку код был сложным с обещаниями, анализом и другими движущимися частями, мне потребовалось много часов, чтобы выяснить виновного часть и причины, но в конце концов я понял, что массив JS не соответствует списку F # должным образом, и я нашел единственный способ двигаться дальше:
type IJSInterface =
abstract FetchPosts: string -> JS.Promise<DBPost list>
...
// Transform Javascript array to F# normal list
let postList = straightJSArrayWithTypedPosts |> List.toArray |> Array.toList
Мой вопрос: что рекомендуется способ взаимодействия с javascript массивами? Потому что я прочитал всю документацию, которую мог, и не смог найти точных инструкций по этой части. И лично я вижу это больше как ошибку. На самом деле, я sh мог бы запретить эту "функцию" из-за ошибок компилятора или иметь немедленное безопасное взаимодействие с массивами между javascript и F #. Есть ли такая опция компилятора? Как мог компилятор избежать такого целого воскресенья? Есть ли какой-нибудь флаг или что-то еще?
Редактировать: как и предполагалось в ответе, пропущенный код javascript фактически возвращал массив javascript , который не совпадает с список , хотя оба они очень похожи, они не одинаковы, несмотря на то, что ведут себя одинаково для большинства целей в динамических c языках .