`on${Capitalize<string & keyof T>}`]?: K extends `on${infer C}`
? T[Uncapitalize<C>] extends null
? (...args: any[]) => any
- : T[Uncapitalize<C>]
+ : (
+ ...args: T[Uncapitalize<C>] extends (...args: infer P) => any
+ ? P
+ : never
+ ) => any
: never
}
: {}
}
})
+ // with tsx
+ const Component = defineComponent({
+ emits: {
+ click: (n: number) => typeof n === 'number'
+ },
+ setup(props, { emit }) {
+ expectType<((n: number) => any) | undefined>(props.onClick)
+ emit('click', 1)
+ // @ts-expect-error
+ expectError(emit('click'))
+ // @ts-expect-error
+ expectError(emit('click', 'foo'))
+ }
+ })
+
+ defineComponent({
+ render() {
+ return (
+ <Component
+ onClick={(n: number) => {
+ return n + 1
+ }}
+ />
+ )
+ }
+ })
+
// without emits
defineComponent({
setup(props, { emit }) {