import { type Directive, type ObjectDirective, vModelText } from 'vue' import { describe, expectType } from './utils' type ExtractBinding = T extends ( el: any, binding: infer B, vnode: any, prev: any, ) => any ? B : never declare function testDirective< Value, Modifiers extends string = string, Arg extends string = string, >(): ExtractBinding> describe('vmodel', () => { expectType>( vModelText, ) // @ts-expect-error expectType>(vModelText) }) describe('custom', () => { expectType<{ value: number oldValue: number | null arg?: 'Arg' modifiers: Partial> }>(testDirective()) expectType<{ value: number oldValue: number | null arg?: 'Arg' modifiers: Record<'a' | 'b', boolean> // @ts-expect-error }>(testDirective()) expectType<{ value: number oldValue: number | null arg?: 'Arg' modifiers: Record<'a' | 'b', boolean> // @ts-expect-error }>(testDirective()) expectType<{ value: number oldValue: number | null arg?: 'Arg' modifiers: Record<'a' | 'b', boolean> // @ts-expect-error }>(testDirective()) })