From cc1357bfd647b178faac120fd77eaaa99ea7354b Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 22 Jul 2024 12:37:25 -0400 Subject: [PATCH] tidy up --- packages/svelte/tests/types/snippet.ts | 37 ++++++++++++++++++-------- packages/svelte/types/index.d.ts | 12 ++++----- 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/packages/svelte/tests/types/snippet.ts b/packages/svelte/tests/types/snippet.ts index 9aeef3330b..edc5aba123 100644 --- a/packages/svelte/tests/types/snippet.ts +++ b/packages/svelte/tests/types/snippet.ts @@ -1,25 +1,40 @@ import type { Snippet } from 'svelte'; +const return_type: ReturnType = null as any; + // @ts-expect-error const a: Snippet<{ text: string }> = () => {}; // @ts-expect-error -const b: Snippet = (a, b) => {}; +const b: Snippet = (a, b) => { + return return_type; +}; +// @ts-expect-error +const c: Snippet = (a: string) => { + return return_type; +}; // @ts-expect-error -const c: Snippet = (a: string) => {}; +const d: Snippet = (a: string, b: number) => { + return return_type; +}; // @ts-expect-error -const d: Snippet = (a: string, b: number) => {}; +const e: Snippet = (a: string) => { + return return_type; +}; // @ts-expect-error -const e: Snippet = (a: string) => {}; const f: Snippet = (a) => { - // @ts-expect-error a?.x; + return return_type; }; -const g: Snippet<[boolean]> = (internals, a) => { +const g: Snippet<[boolean]> = (a) => { // @ts-expect-error - a() === ''; - a() === true; + a === ''; + a === true; + return return_type; +}; +const h: Snippet<[{ a: true }]> = (a) => { + a.a === true; + return return_type; }; -const h: Snippet<[{ a: true }]> = (internals, a) => { - a().a === true; +const i: Snippet = () => { + return return_type; }; -const i: Snippet = () => {}; diff --git a/packages/svelte/types/index.d.ts b/packages/svelte/types/index.d.ts index 0f8845095a..ba71b15d05 100644 --- a/packages/svelte/types/index.d.ts +++ b/packages/svelte/types/index.d.ts @@ -261,10 +261,7 @@ declare module 'svelte' { element?: typeof HTMLElement; }; - /** - * Internal implementation details that vary between environments - */ - export type SnippetInternals = Branded<{}, 'SnippetInternals'>; + const SnippetReturn: unique symbol; // Use an interface instead of a type, makes for better intellisense info because the type is named in more situations. /** @@ -281,12 +278,13 @@ declare module 'svelte' { export interface Snippet { ( this: void, - internal: SnippetInternals, // this conditional allows tuples but not arrays. Arrays would indicate a // rest parameter type, which is not supported. If rest parameters are added // in the future, the condition can be removed. - ...args: number extends Parameters['length'] ? never : Getters - ): void; + ...args: number extends Parameters['length'] ? never : Parameters + ): typeof SnippetReturn & { + _: 'functions passed to {@render ...} tags must use the `Snippet` type imported from "svelte"'; + }; } interface DispatchOptions {