Skip to content

Commit

Permalink
refactor(types): use explicit modifiers type (#10856)
Browse files Browse the repository at this point in the history
  • Loading branch information
btea committed May 6, 2024
1 parent 8373350 commit 481b1b6
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 4 deletions.
2 changes: 1 addition & 1 deletion packages/dts-test/defineComponent.test-d.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1501,7 +1501,7 @@ describe('should work when props type is incompatible with setup returned type '

describe('withKeys and withModifiers as pro', () => {
const onKeydown = withKeys(e => {}, [''])
const onClick = withModifiers(e => {}, [''])
const onClick = withModifiers(e => {}, [])
;<input onKeydown={onKeydown} onClick={onClick} />
})

Expand Down
2 changes: 1 addition & 1 deletion packages/runtime-dom/__tests__/directives/vOn.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ describe('runtime-dom: v-on directive', () => {
})

test('it should support key modifiers and system modifiers', () => {
const keyNames = ['ctrl', 'shift', 'meta', 'alt']
const keyNames = ['ctrl', 'shift', 'meta', 'alt'] as const

keyNames.forEach(keyName => {
const el = document.createElement('div')
Expand Down
16 changes: 14 additions & 2 deletions packages/runtime-dom/src/directives/vOn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,21 @@ import { hyphenate, isArray } from '@vue/shared'
const systemModifiers = ['ctrl', 'shift', 'alt', 'meta']

type KeyedEvent = KeyboardEvent | MouseEvent | TouchEvent
type ModifierGuardsKeys =
| 'stop'
| 'prevent'
| 'self'
| 'ctrl'
| 'shift'
| 'alt'
| 'meta'
| 'left'
| 'middle'
| 'right'
| 'exact'

const modifierGuards: Record<
string,
ModifierGuardsKeys,
(e: Event, modifiers: string[]) => void | boolean
> = {
stop: e => e.stopPropagation(),
Expand All @@ -36,7 +48,7 @@ export const withModifiers = <
T extends (event: Event, ...args: unknown[]) => any,
>(
fn: T & { _withMods?: { [key: string]: T } },
modifiers: string[],
modifiers: ModifierGuardsKeys[],
) => {
const cache = fn._withMods || (fn._withMods = {})
const cacheKey = modifiers.join('.')
Expand Down

0 comments on commit 481b1b6

Please sign in to comment.