Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit 267f56a

Browse files
bengryFezVrasta
authored andcommitted
fix typescript types
1 parent aae1868 commit 267f56a

File tree

2 files changed

+23
-5
lines changed

2 files changed

+23
-5
lines changed

src/Popper.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
type Placement,
66
type PositioningStrategy,
77
type VirtualElement,
8+
type StrictModifiers,
89
type Modifier,
910
} from '@popperjs/core/lib';
1011
import { ManagerReferenceNodeContext } from './Manager';
@@ -13,7 +14,7 @@ import { unwrapArray, setRef } from './utils';
1314
import { usePopper } from './usePopper';
1415

1516
type ReferenceElement = ?(VirtualElement | HTMLElement);
16-
type Modifiers = Array<$Shape<Modifier<any>>>;
17+
type Modifiers = Array<StrictModifiers | $Shape<Modifier<string, {}>>>;
1718

1819
export type PopperArrowProps = {|
1920
ref: Ref,

typings/react-popper.d.ts

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
import * as React from 'react';
21
import * as PopperJS from '@popperjs/core';
2+
import * as React from 'react';
3+
4+
// Utility type
5+
type UnionWhere<U, M> = U extends M ? U : never;
36

47
interface ManagerProps {
58
children: React.ReactNode;
@@ -37,16 +40,30 @@ export interface PopperChildrenProps {
3740
arrowProps: PopperArrowProps;
3841
}
3942

40-
export interface PopperProps {
43+
type StrictModifierNames = NonNullable<PopperJS.StrictModifiers['name']>;
44+
45+
type StrictModifier<Name extends StrictModifierNames> = UnionWhere<
46+
PopperJS.StrictModifiers,
47+
{ name?: Name }
48+
>;
49+
50+
type Modifier<Name> = Name extends StrictModifierNames
51+
? StrictModifier<Name>
52+
: Partial<PopperJS.Modifier<Name, object>>;
53+
54+
export interface PopperProps<Modifiers> {
4155
children: (props: PopperChildrenProps) => React.ReactNode;
4256
innerRef?: React.Ref<any>;
43-
modifiers?: Array<Partial<PopperJS.Modifier<any>>>;
57+
modifiers?: ReadonlyArray<Modifier<Modifiers>>;
4458
placement?: PopperJS.Placement;
4559
strategy?: PopperJS.PositioningStrategy;
4660
referenceElement?: HTMLElement | PopperJS.VirtualElement;
4761
onFirstUpdate?: (state: Partial<PopperJS.State>) => void;
4862
}
49-
export class Popper extends React.Component<PopperProps, {}> {}
63+
export class Popper<Modifiers> extends React.Component<
64+
PopperProps<Modifiers>,
65+
{}
66+
> {}
5067

5168
export function usePopper(
5269
referenceElement?: Element | null,

0 commit comments

Comments
 (0)