Bonjour, j'ai des problèmes pour écrire des liaisons pour un petit composant React. J'ai un type d'union typique avec des cas qui représentent des accessoires pour le composant. L'un de ces cas ressemble à Tabs of ITab list
. Lorsque j'essaie de transformer une liste de ces accessoires en un objet avec keyValueList
, cela fonctionne bien, jusqu'à ce que j'ajoute l'accessoire Tabs
, où le JavaScript génère alors une erreur indiquant Cannot infer key and value of [object Object]
.
open Fable.Core
open Fable.Core.JsInterop
type ITab =
{ Name: string
Selected: bool }
type Props =
| Tabs of ITab list
| Title of string
let tab = { Name = "Hello"; Selected = true }
let works = keyValueList CaseRules.LowerFirst [Title "My Title"]
let doesNotWork = keyValueList CaseRules.None [Tabs [tab]; Title "My Title"]
Je m'attendrais à ce que la doesNotWork
ne génère pas d'erreur et génère un objet qui ressemble à :
var doesNotWork = {
title: "My Title",
tabs: [
{
name: "Hello",
selected: true
}
]
}
dotnet fable --version
): 1.3.0Vous pouvez résoudre votre problème en utilisant un tableau :
open Fable.Core
open Fable.Core.JsInterop
type ITab =
{ Name: string
Selected: bool }
type Props =
| Tabs of ITab array
| Title of string
let tab = { Name = "Hello"; Selected = true }
let works = keyValueList CaseRules.LowerFirst [Title "My Title"]
let doesNotWork = keyValueList CaseRules.None [Tabs [| tab |]; Title "My Title"]
Le problème se produit car Json/JObject n'utilise pas le type de liste qui est un objet lors de l'exécution. Json/Jobject ne connaît que les tableaux.
Merci! Je n'étais pas au courant de cette limitation, tout fonctionne maintenant après le passage au tableau.
Oui, en fait, si vous utilisez une liste, keyValueList
interprétera qu'il s'agit d'une keyValueList imbriquée, comme dans le cas de Style
:
div [ClassName "foo"
Style [BackgroundColor "red"
Width "500px"]] []
Commentaire le plus utile
Vous pouvez résoudre votre problème en utilisant un tableau :
Le problème se produit car Json/JObject n'utilise pas le type de liste qui est un objet lors de l'exécution. Json/Jobject ne connaît que les tableaux.