Descreva o bug
Estou tendo um autocompletar de código confuso com JS e TS simples. Não tenho certeza se configurei algo errado.
Reproduzir
veja a configuração simples com um Parent.svelte
e um componente 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>
:O auto-completar de código no componente filho mostra bar
, baz
, foo
, ref
etc.
esperado: apenas foo
e bar
ref
lá, o que ele faz?bar
, baz
, foo
estão todos listados como opcionais (? :)
esperado: bar
opcional, baz
não listado, foo
obrigatório (veja o aviso do console).
O preenchimento de código em child
-reference também está me confundindo, além de outras coisas relacionadas ao svelte2tsx, etc .:
foo
está listado, embora não esteja acessível (consulte o erro do console), baz
não está listado.
esperado: foo
não está listado, baz
está listado
Embora baz
não esteja listado, posso chamá-lo e funciona como esperado (consulte o log do 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>
O auto-completar de código no componente filho mostra bar
, baz
, foo
, ref
etc.
esperado: apenas foo
e bar
+ etc.
bar
, baz
, foo
estão todos listados como opcionais (? :)
esperado: bar
opcional, baz
não listado, foo
obrigatório (veja o aviso do console).
O preenchimento de código em child
-reference mostra apenas $$prop_def
e $$slot_def
$$prop_def
a lista contém bar
, baz
, foo
(esperaria apenas baz
)foo
, recebo "Cannot read ..."
-error, mas esperaria "Props cannot be read directly from the component ..."
$$prop_def.baz()
não funciona (consulte o erro do console)child.baz()
funciona conforme o esperado (consulte console.log), embora não esteja listado, mas é marcado como um erro no código do VS: "Property 'baz' does not exist on type 'Child__SvelteComponent_'. (ts2339)
O preenchimento de código realmente parece tão confuso / errado que não tenho certeza se configurei algo errado. 🤔 Agradeceria muito qualquer sugestão se presumir!
Sistema (preencha as seguintes informações):
package.json relevante
"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"
]
}
Obrigada!
Você não configurou nada errado, você apenas percebeu muitas das deficiências de uma vez 😃
Ah, ok, obrigado pela resposta rápida!
- foo opcional: Como você não tem o modo estrito, cada prop é marcado como opcional. Podemos precisar rever esta decisão.
Ok, não posso compartilhar minha opinião sobre este caixa eletrônico, primeiro preciso verificar / lembrar por que não o estou usando. 🤔
Rápida atualização:
$$slot_def
etc tem um comentário que diz que se trata apenas de verificação de tipo e que você não deve usar.ref
não aparece mais
Comentários muito úteis
Você não configurou nada errado, você apenas percebeu muitas das deficiências de uma vez 😃