Fable: Impossible de déduire la clé et la valeur de [object Object]

Créé le 8 déc. 2017  ·  3Commentaires  ·  Source: fable-compiler/Fable

La description

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] .

Code de reproduction

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"]

Résultats attendus et réels

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
    }
  ]
}

Informations connexes

  • Version Fable ( dotnet fable --version ): 1.3.0
  • Système d'exploitation : Windows 10 Pro

Commentaire le plus utile

Vous 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.

Tous les 3 commentaires

Vous 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"]] []
Cette page vous a été utile?
0 / 5 - 0 notes