Describe el error
Estoy experimentando una finalización de código confusa con JS simple y TS. No estoy seguro de haber configurado algo mal.
Reproducir
vea una configuración simple con un componente Parent.svelte
y 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 finalización del código en el componente Hijo muestra bar
, baz
, foo
, ref
etc.
esperado: solo foo
y bar
ref
allí, qué hace?bar
, baz
, foo
están todos listados como opcionales (? :)
esperado: bar
opcional, baz
no listado, foo
obligatorio (ver advertencia de consola).
La finalización del código en child
-reference también me confunde, además de cosas relacionadas con svelte2tsx, etc.
foo
está en la lista, aunque no es accesible (ver error de consola), baz
no está en la lista.
esperado: foo
no está en la lista, baz
está en la lista
Aunque baz
no está en la lista, puedo llamarlo y funciona como se esperaba (consulte el registro de la consola)
<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 finalización del código en el componente Hijo muestra bar
, baz
, foo
, ref
etc.
esperado: solo foo
y bar
+ etc.
bar
, baz
, foo
están todos listados como opcionales (? :)
esperado: bar
opcional, baz
no listado, foo
obligatorio (ver advertencia de consola).
La finalización del código en child
-referencia muestra solo $$prop_def
y $$slot_def
$$prop_def
la lista contiene bar
, baz
, foo
(esperaría solo baz
)foo
obtengo "Cannot read ..."
-error, pero esperaría "Props cannot be read directly from the component ..."
$$prop_def.baz()
no funciona (ver error de consola)child.baz()
funciona como se esperaba (ver console.log), aunque no está en la lista, pero se marca como un error en el código VS: "Property 'baz' does not exist on type 'Child__SvelteComponent_'. (ts2339)
La finalización del código en realidad parece tan confusa / incorrecta, que no estoy seguro de haber configurado algo mal. 🤔 ¡Agradecería mucho cualquier pista si lo asume!
Sistema (complete la siguiente información):
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"
]
}
¡Gracias!
No ha configurado nada incorrecto, solo notó muchas de las deficiencias a la vez 😃
Ah, está bien, ¡gracias por la rápida respuesta!
- foo opcional: debido a que no tiene el modo estricto, cada accesorio se marca como opcional. Es posible que necesitemos revisar esta decisión.
De acuerdo, no puedo compartir mi opinión sobre este cajero automático, primero tengo que verificar / recordar por qué no lo tengo encendido. 🤔
Actualización rápida:
$$slot_def
etc tienen un comentario que le dice que se trata solo de la verificación de tipos y que no debe usarlo.ref
ya no aparece
Comentario más útil
No ha configurado nada incorrecto, solo notó muchas de las deficiencias a la vez 😃