types: improve app.directive type generics (#11926)

This commit is contained in:
ML 2024-09-16 03:30:04 +01:00 committed by GitHub
parent aa5dafd2b5
commit 1bad606eb3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 29 additions and 9 deletions

View File

@ -3,12 +3,17 @@ import { expectType } from './utils'
const app = createApp({})
app.directive<HTMLElement, string>('custom', {
mounted(el, binding) {
expectType<HTMLElement>(el)
expectType<string>(binding.value)
app.directive<HTMLElement, string, 'prevent' | 'stop', 'arg1' | 'arg2'>(
'custom',
{
mounted(el, binding) {
expectType<HTMLElement>(el)
expectType<string>(binding.value)
expectType<{ prevent: boolean; stop: boolean }>(binding.modifiers)
expectType<'arg1' | 'arg2'>(binding.arg!)
// @ts-expect-error not any
expectType<number>(binding.value)
// @ts-expect-error not any
expectType<number>(binding.value)
},
},
})
)

View File

@ -46,8 +46,23 @@ export interface App<HostElement = any> {
name: string,
component: T,
): this
directive<T = any, V = any>(name: string): Directive<T, V> | undefined
directive<T = any, V = any>(name: string, directive: Directive<T, V>): this
directive<
HostElement = any,
Value = any,
Modifiers extends string = string,
Arg extends string = string,
>(
name: string,
): Directive<HostElement, Value, Modifiers, Arg> | undefined
directive<
HostElement = any,
Value = any,
Modifiers extends string = string,
Arg extends string = string,
>(
name: string,
directive: Directive<HostElement, Value, Modifiers, Arg>,
): this
mount(
rootContainer: HostElement | string,
/**