Skip to content

Fix type check for link options #15229

@hyunbinseo

Description

@hyunbinseo

Describe the bug

I am not sure if this is the right repo. Please move if incorrect.

SvelteKit link options do not show type errors:

<!-- error in class attr. only -->
<div
  data-sveltekit-keepfocus={3}
  data-sveltekit-noscroll={3}
  data-sveltekit-preload-code={3}
  data-sveltekit-preload-data={3}
  data-sveltekit-reload={3}
  data-sveltekit-replacestate={3}
  class={3}
></div>

The type seems to live here in the Svelte repo:

https://github.com/sveltejs/svelte/blob/svelte%405.46.0/packages/svelte/elements.d.ts#L854-L869

'data-sveltekit-keepfocus'?: true | '' | 'off' | undefined | null;
'data-sveltekit-noscroll'?: true | '' | 'off' | undefined | null;
'data-sveltekit-preload-code'?:
  | true
  | ''
  | 'eager'
  | 'viewport'
  | 'hover'
  | 'tap'
  | 'off'
  | undefined
  | null;
'data-sveltekit-preload-data'?: true | '' | 'hover' | 'tap' | 'off' | undefined | null;
'data-sveltekit-reload'?: true | '' | 'off' | undefined | null;
'data-sveltekit-replacestate'?: true | '' | 'off' | undefined | null;

though it does exist in the SvelteKit repo as well:

// `declare module "svelte/elements"` needs to happen in a non-ambient module, and dts-buddy generates one big ambient module,
// so we can't add it there - therefore generate the typings ourselves here.
// We're not using the `declare namespace svelteHTML` variant because that one doesn't augment the HTMLAttributes interface
// people could use to type their own components.
// The T generic is needed or else there's a "all declarations must have identical type parameters" error.
const template = `
${GENERATED_COMMENT}
declare module "svelte/elements" {
export interface HTMLAttributes<T> {
'data-sveltekit-keepfocus'?: true | '' | 'off' | undefined | null;
'data-sveltekit-noscroll'?: true | '' | 'off' | undefined | null;
'data-sveltekit-preload-code'?:
| true
| ''
| 'eager'
| 'viewport'
| 'hover'
| 'tap'
| 'off'
| undefined
| null;
'data-sveltekit-preload-data'?: true | '' | 'hover' | 'tap' | 'off' | undefined | null;
'data-sveltekit-reload'?: true | '' | 'off' | undefined | null;
'data-sveltekit-replacestate'?: true | '' | 'off' | undefined | null;
}
}
export {};
`;

Note that false does seem to disable preload data. See #15064 (comment)

data-sveltekit-preload-data={false}
data-sveltekit-preload-data="off"

Reproduction

Reproducible on a new sv create template

Logs

System Info

System:
  OS: Windows 11 10.0.26200
  CPU: (8) x64 Intel(R) Core(TM) Ultra 7 258V
  Memory: 7.11 GB / 31.48 GB
Binaries:
  Node: 24.12.0 - C:\Users\hyunb\AppData\Local\fnm_multishells\3552_1765851436409\node.EXE
  Yarn: 1.22.22 - C:\Users\hyunb\AppData\Local\fnm_multishells\3552_1765851436409\yarn.CMD
  npm: 11.6.2 - C:\Users\hyunb\AppData\Local\fnm_multishells\3552_1765851436409\npm.CMD
  pnpm: 10.25.0 - C:\Users\hyunb\AppData\Local\fnm_multishells\3552_1765851436409\pnpm.CMD
  Deno: 2.4.0 - C:\Users\hyunb\.deno\bin\deno.EXE
Browsers:
  Chrome: 143.0.7499.110
  Edge: Chromium (140.0.3485.54)
  Firefox: 146.0 - C:\Program Files\Mozilla Firefox\firefox.exe

Severity

annoyance

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions