Skip to content

Commit a2a23fa

Browse files
authored
fix(types): omit children from wrapper props types (#495)
1 parent 11d99e0 commit a2a23fa

4 files changed

Lines changed: 30 additions & 6 deletions

File tree

packages/svelte-core/types.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ export interface SetupOptions<W extends Component = never> {
109109
/** A wrapper component. */
110110
wrapper?: ComponentImport<W>
111111
/** Wrapper component props. */
112-
wrapperProps?: Props<W>
112+
wrapperProps?: Omit<Props<W>, 'children'>
113113
}
114114

115115
/** The result of setting up the document for rendering. */
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<script lang="ts">
2+
import { setContext, type Snippet } from 'svelte'
3+
4+
const { greeting, children } = $props<{
5+
greeting: string
6+
children: Snippet
7+
}>()
8+
9+
export const wrapperContext = {
10+
get greeting() {
11+
return greeting
12+
},
13+
}
14+
15+
setContext('wrapperContext', wrapperContext)
16+
</script>
17+
18+
<div data-testid="wrapper-runes">
19+
{@render children?.()}
20+
</div>

tests/render-runes.test-d.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { describe, test, vi } from 'vitest'
55
import UntypedComponent from './fixtures/Comp.svelte'
66
import LegacyComponent from './fixtures/Typed.svelte'
77
import Component from './fixtures/TypedRunes.svelte'
8+
import Wrapper from './fixtures/WrapperRunesTyped.svelte'
89

910
describe('types (runes)', () => {
1011
test('render is a function that accepts a Svelte component', () => {
@@ -44,18 +45,20 @@ describe('types (runes)', () => {
4445
const result = subject.render(
4546
UntypedComponent,
4647
{},
47-
{ wrapper: Component, wrapperProps: { name: 'Alice', count: 42 } }
48+
{ wrapper: Wrapper, wrapperProps: { greeting: 'hello' } }
4849
)
4950

50-
expectTypeOf(result).toExtend<{ wrapper: { hello: string } }>()
51+
expectTypeOf(result).toExtend<{
52+
wrapper: { wrapperContext: { greeting: string } }
53+
}>()
5154
})
5255

5356
test('invalid wrapper props are rejected', () => {
5457
subject.render(
5558
UntypedComponent,
5659
{},
57-
// @ts-expect-error: count should be a number
58-
{ wrapper: Component, wrapperProps: { name: 'Alice', count: '42' } }
60+
// @ts-expect-error: greeting should be a string
61+
{ wrapper: Wrapper, wrapperProps: { greeting: 42 } }
5962
)
6063
})
6164
})

tests/tsconfig.legacy.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"fixtures/CompRunes.svelte",
66
"fixtures/PropCloner.svelte",
77
"fixtures/TypedRunes.svelte",
8-
"fixtures/WrapperRunes.svelte"
8+
"fixtures/WrapperRunes.svelte",
9+
"fixtures/WrapperRunesTyped.svelte"
910
]
1011
}

0 commit comments

Comments
 (0)