Language-tools: L'accessoire d'emplacement n'a pas été trouvé sur l'élément d'emplacement lui-même

Créé le 14 févr. 2021  ·  3Commentaires  ·  Source: sveltejs/language-tools

Décrivez le bogue
Les propriétés de slot ne se trouvent que dans l'élément slot, mais pas sur l'élément lui-même. Svelte permet d'utiliser la propriété sur l'élément, donc l'erreur est simplement un peu trompeuse. Peut-être n'a-t-il fait surface que comme erreur lors de l'utilisation de TypeScript avec des paramètres suffisamment stricts.

Reproduire
Créez un composant avec des propriétés de slot et utilisez la propriété sur l'élément déclarant la propriété (ici l'erreur sur l'utilisation de class ) :

<Component n={10}>
    <div slot="item" let:zebra class={zebra}>Hello {zebra}</div>
</Component>

[REPL]

Comportement attendu
La propriété Slot est dans la portée et aucune erreur n'est générée.

Captures d'écran
image

Système (veuillez compléter les informations suivantes) :

  • Système d'exploitation : Windows 10 64 bits
  • IDE : VSCode
  • Plugin/Package : Svelte pour VSCode
Fixed bug

Tous les 3 commentaires

Nous devons tirer la transformation jsx au niveau supérieur, entourant la balise. Ainsi, par exemple, dans ce test, il devrait devenir

<>{() => { let {thing:{ a }} = __sveltets_instanceOf(Component).$$slot_def['default'];<><Component>
    <h1>Hello { a }</h1>
</Component></>}}</>

@dummdidumm Merci pour la correction

Je viens de tester ceci et si le let:prop est après son utilisation, vous obtenez toujours un avertissement svelte au lieu d'une erreur de type :

'prop' n'est pas défini [svelte(missing-declaration)]

Exemple de capture d'écran :

image

Cependant, la sortie générée fonctionne quel que soit l'ordre. Bien sûr, je peux simplement réorganiser les attributs pour éliminer l'erreur comme solution de contournement.

Ceci est un bug du compilateur Svelte, j'ai créé https://github.com/sveltejs/svelte/issues/6009 pour cela.

Cette page vous a été utile?
0 / 5 - 0 notes