TypeScript - Spridningstyper kan endast skapas från objekttyper
Koden nedan orsakar Spridningstyper kan bara skapas från objekttyper:
const bool = true
console.log({ ...(bool || { foo: 'bar' }) })
Medan följande fungerar bra, vad orsakade felet ovan och hur kan man undertrycka det?
const bool = true
console.log({ ...(bool && { foo: 'bar' }) })
Svar #1
När du gör ||, utvärderar det objektet till vänster och försöker sprida det. Men det kan inte sprida en boolean-variabel, det kan bara sprida ett objekt.
När du gör &&, returnerar uttrycket inom parentes { foo: 'bar' }-objektet, vilket kan spridas.
För att leka med detta, prova:
console.log(true && 'hi') // "hi"
console.log(true || 'hi') // true
Svar #2
Den första översätt så här
Om bool är sann eller objektet... I det fallet försöker det sprida bool men ser att bool är en Boolean, inte ett objekt... Du får felet
Den andra översätt så här
Om bool är true, sprid då detta objekt... Ampersand-tecknet i det fallet gör en kontroll, och säkerställer att bool är true innan objektet sprids... Detta är ekvivalent med att skriva en if-sats...
if (bool) console.log({ ...{ foo: 'bar' } })
