Fable: Tidak dapat menyimpulkan kunci dan nilai [objek Obyek]

Dibuat pada 8 Des 2017  ·  3Komentar  ·  Sumber: fable-compiler/Fable

Keterangan

Halo, Saya mengalami beberapa masalah saat menulis binding untuk komponen React yang kecil. Saya memiliki tipe serikat yang khas dengan kasing yang mewakili alat peraga untuk komponen. Salah satu kasus itu terlihat seperti Tabs of ITab list . Ketika saya mencoba mengubah daftar props ini menjadi objek dengan keyValueList itu berfungsi dengan baik, sampai saya menambahkan prop Tabs , di mana JavaScript kemudian akan menampilkan kesalahan yang mengatakan Cannot infer key and value of [object Object] .

Kode repro

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

Hasil yang diharapkan dan aktual

Saya berharap nilai doesNotWork tidak menimbulkan kesalahan dan menghasilkan objek yang terlihat seperti:

var doesNotWork = {
  title: "My Title",
  tabs: [
    { 
      name: "Hello",
      selected: true
    }
  ]
}

Informasi terkait

  • Versi fabel ( dotnet fable --version ): 1.3.0
  • Sistem operasi: Windows 10 Pro

Komentar yang paling membantu

Anda dapat memperbaiki masalah Anda dengan menggunakan array:

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

Masalah terjadi karena Json/JObject tidak menggunakan tipe daftar yang merupakan objek saat runtime. Json/Jobject hanya tahu array.

Semua 3 komentar

Anda dapat memperbaiki masalah Anda dengan menggunakan array:

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

Masalah terjadi karena Json/JObject tidak menggunakan tipe daftar yang merupakan objek saat runtime. Json/Jobject hanya tahu array.

Terima kasih! Saya tidak mengetahui batasan itu, semuanya berfungsi sekarang setelah beralih ke array.

Ya, sebenarnya jika Anda menggunakan daftar keyValueList akan menafsirkan bahwa itu adalah keyValueList bersarang, seperti dalam kasus Style :

div [ClassName "foo"
     Style [BackgroundColor "red"
            Width "500px"]] []
Apakah halaman ini membantu?
0 / 5 - 0 peringkat