svelte
svelte copied to clipboard
Missing type in Svelte compiler AST
Describe the bug
The script part of AST specifically imports are missing importKind type
Reproduction
import { parse } from 'svelte/compiler';
const ast = parse(`
<script lang="ts">
import type { Snippet } from 'svelte'
import { mount } from 'svelte'
</script>
`, { modern: true })
// narrow down type to import declarations
if (ast.instance?.content.body[0].type === 'ImportDeclaration') {
// this gives error // Property 'importKind' does not exist on type 'ImportDeclaration'.
ast.instance?.content.body[0].importKind
// But if we log it we can see it dose have them
console.log(ast.instance?.content.body[0].importKind) // type
console.log(ast.instance?.content.body[1].importKind) // value
}
Logs
No response
System Info
Not important
Severity
annoyance
This part is somewhat private API/ part of the acorn TS plugin, which may change . I'm not sure there are typings for it, and I'm not sure if we want to expose them
It's not something I'm importing from somewhere I shouldn't it's part or parse function and it even has documentation https://svelte.dev/docs/svelte/svelte-compiler#parse
I feel like something like that should have proper types I have seen svelte already adding extra types but was not able to figure out how I can do that too
As a temporary workaround, you could use types from @typescript-eslint/typescript-estree.
Credits goes to @manuel3108 via his work on the https://github.com/Rich-Harris/esrap/pull/13
As a temporary workaround, you could use types from
@typescript-eslint/typescript-estree.
Although, this shouldn't go without saying that these types are not fully compatible. Those are just the closest types we have available right now.