| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import {
- FunctionalComponent,
- expectError,
- expectType,
- Component
- } from './index'
- // simple function signature
- const Foo = (props: { foo: number }) => props.foo
- // TSX
- expectType<JSX.Element>(<Foo foo={1} />)
- expectType<JSX.Element>(<Foo foo={1} key="1" />)
- expectType<JSX.Element>(<Foo foo={1} ref="ref" />)
- // @ts-expect-error
- expectError(<Foo />)
- // @ts-expect-error
- expectError(<Foo foo="bar" />)
- // @ts-expect-error
- expectError(<Foo baz="bar" />)
- // Explicit signature with props + emits
- const Bar: FunctionalComponent<
- { foo: number },
- { update: (value: number) => void }
- > = (props, { emit }) => {
- expectType<number>(props.foo)
- emit('update', 123)
- // @ts-expect-error
- expectError(emit('nope'))
- // @ts-expect-error
- expectError(emit('update'))
- // @ts-expect-error
- expectError(emit('update', 'nope'))
- }
- // assigning runtime options
- Bar.props = {
- foo: Number
- }
- // @ts-expect-error
- expectError((Bar.props = { foo: String }))
- Bar.emits = {
- update: value => value > 1
- }
- // @ts-expect-error
- expectError((Bar.emits = { baz: () => void 0 }))
- // TSX
- expectType<JSX.Element>(<Bar foo={1} />)
- // @ts-expect-error
- expectError(<Foo />)
- // @ts-expect-error
- expectError(<Bar foo="bar" />)
- // @ts-expect-error
- expectError(<Foo baz="bar" />)
- const Baz: FunctionalComponent<{}, string[]> = (props, { emit }) => {
- expectType<{}>(props)
- expectType<(event: string) => void>(emit)
- }
- expectType<Component>(Baz)
- const Qux: FunctionalComponent<{}, ['foo', 'bar']> = (props, { emit }) => {
- emit('foo')
- emit('foo', 1, 2)
- emit('bar')
- emit('bar', 1, 2)
- }
- expectType<Component>(Qux)
|