Décrivez le bogue
Je rencontre un achèvement de code confus avec à la fois JS et TS. Je ne sais pas si j'ai configuré quelque chose de mal.
Reproduire
voir configuration simple avec un composant Parent.svelte
et un composant Child.svelte
:
// Parent.svelte
<script>
import {onMount} from "svelte"
import Child from "./Child.svelte"
let child
onMount(()=> {
})
</script>
<Child bind:this={child} />`
// Child.svelte
<script>
export let foo
export let bar = undefined
export const baz = () => {
console.log("executed function 'baz'!")
}
</script>
<div>
foo is: <em>{foo}</em><br/>
bar is: <em>{bar}</em>
</div>
<script></script>
:La complétion de code sur le composant enfant montre bar
, baz
, foo
, ref
etc.
prévu: seulement foo
et bar
ref
là, que fait-il?bar
, baz
, foo
sont tous listés comme facultatifs (? :)
attendu: bar
facultatif, baz
non listé, foo
obligatoire (voir l'avertissement de la console).
La complétion de code sur child
-reference me déroute également, à côté de choses liées à svelte2tsx, etc.
foo
est répertorié, bien qu'il ne soit pas accessible (voir erreur de console), baz
n'est pas répertorié.
attendu: foo
n'est pas répertorié, baz
est répertorié
Bien que baz
ne soit pas répertorié, je peux l'appeler et cela fonctionne comme prévu (voir le journal de la console)
<script lang="typescript"></script>
:// Parent.svelte
<script lang="typescript">
import {onMount} from "svelte"
import Child from "./Child.svelte"
let child:Child
onMount(()=> {
})
</script>
<Child bind:this={child} />`
// Child.svelte
<script lang="typescript">
export let foo: number
export let bar: number = undefined
export const baz = (): void => {
console.log("executed function 'baz'!")
}
</script>
<div>
foo is: <em>{foo}</em><br/>
bar is: <em>{bar}</em>
</div>
La complétion de code sur le composant enfant montre bar
, baz
, foo
, ref
etc.
prévu: seulement foo
et bar
+ etc.
bar
, baz
, foo
sont tous listés comme facultatifs (? :)
attendu: bar
facultatif, baz
non listé, foo
obligatoire (voir l'avertissement de la console).
La complétion du code sur child
-reference montre seulement $$prop_def
et $$slot_def
$$prop_def
la liste contient bar
, baz
, foo
(attendez seulement baz
)foo
j'obtiens "Cannot read ..."
-error, mais je m'attendrais à "Props cannot be read directly from the component ..."
$$prop_def.baz()
ne fonctionne pas (voir erreur de console)child.baz()
fonctionne comme prévu (voir console.log), bien qu'il ne soit pas répertorié, mais est marqué comme une erreur dans VS Code: "Property 'baz' does not exist on type 'Child__SvelteComponent_'. (ts2339)
L'achèvement du code semble en fait si déroutant / faux, que je ne suis pas sûr si j'ai peut-être configuré quelque chose de mal? 🤔 J'apprécierais beaucoup tout indice si c'est le cas!
Système (veuillez compléter les informations suivantes):
package.json pertinent
"rollup": "^2.21.0",
"rollup-plugin-svelte": "^5.2.3",
"@rollup/plugin-commonjs": "^14.0.0",
"@rollup/plugin-node-resolve": "^8.4.0",
"@rollup/plugin-typescript": "^5.0.2",
"svelte": "^3.24.0",
"svelte-preprocess": "^4.0.8",
"tslib": "^2.0.0",
"typescript": "^3.9.7"
tsconfig.json
"compilerOptions": {
"target": "es2017",
"strict": false,
"moduleResolution": "node",
"allowJs": false,
"lib": [
"es2017", "DOM"
],
"types": [
"svelte"
],
"baseUrl": "."
},
"include": [
"./src"
]
}
Merci!
Vous n'avez rien configuré de mal, vous venez de remarquer de nombreuses lacunes à la fois 😃
Ah, d'accord, merci pour la réponse rapide!
- foo facultatif: parce que vous n'avez pas de mode strict, chaque accessoire est marqué comme facultatif. Nous devrons peut-être revoir cette décision.
D'accord, je ne peux pas partager mon opinion sur ce guichet automatique, je dois d'abord vérifier / me rappeler pourquoi je ne l'ai pas. 🤔
Mise à jour rapide:
$$slot_def
etc ont un commentaire qui vous indique qu'il s'agit uniquement de la vérification de type et que vous ne devriez pas l'utiliser.ref
n'apparaît plus
Commentaire le plus utile
Vous n'avez rien configuré de mal, vous venez de remarquer de nombreuses lacunes à la fois 😃