diff --git a/packages/svelte/src/internal/client/dom/blocks/snippet.js b/packages/svelte/src/internal/client/dom/blocks/snippet.js index a0fbef9337..9be9ccf9df 100644 --- a/packages/svelte/src/internal/client/dom/blocks/snippet.js +++ b/packages/svelte/src/internal/client/dom/blocks/snippet.js @@ -1,4 +1,5 @@ /** @import { Effect, TemplateNode } from '#client' */ +/** @import { Getters } from '#shared' */ import { add_snippet_symbol } from '../../../shared/validate.js'; import { EFFECT_TRANSPARENT } from '../../constants.js'; import { branch, block, destroy_effect } from '../../reactivity/effects.js'; @@ -73,8 +74,8 @@ export function wrap_snippet(component, fn) { * Create a snippet imperatively using mount, hyrdate and render functions. * @template {unknown[]} Params * @param {{ - * mount: (...params: LazyParams) => Element, - * hydrate?: (element: Element, ...params: LazyParams) => void, + * mount: (...params: Getters) => Element, + * hydrate?: (element: Element, ...params: Getters) => void, * render: (...params: Params) => string * }} options * @returns {import('svelte').Snippet} diff --git a/packages/svelte/src/internal/shared/types.d.ts b/packages/svelte/src/internal/shared/types.d.ts index 426d928ce3..926954c8dc 100644 --- a/packages/svelte/src/internal/shared/types.d.ts +++ b/packages/svelte/src/internal/shared/types.d.ts @@ -6,3 +6,7 @@ export type Store = { export type SourceLocation = | [line: number, column: number] | [line: number, column: number, SourceLocation[]]; + +export type Getters = { + [K in keyof T]: () => T[K]; +}; diff --git a/packages/svelte/src/internal/shared/validate.js b/packages/svelte/src/internal/shared/validate.js index 6617907f4c..bd03c7f999 100644 --- a/packages/svelte/src/internal/shared/validate.js +++ b/packages/svelte/src/internal/shared/validate.js @@ -1,4 +1,5 @@ /** @import { TemplateNode } from '#client' */ +/** @import { Getters } from '#shared' */ import { is_void } from '../../constants.js'; import * as w from './warnings.js'; import * as e from './errors.js'; @@ -6,7 +7,8 @@ import * as e from './errors.js'; const snippet_symbol = Symbol.for('svelte.snippet'); /** - * @param {(anchor: TemplateNode, ...args: any[]) => void} fn + * @template {unknown[]} Params + * @param {(anchor: TemplateNode, ...args: Getters) => void} fn * @returns {import('svelte').Snippet} */ export function add_snippet_symbol(fn) {