diff --git a/react-virtualized/index.d.ts b/react-virtualized/index.d.ts index f00215ffd2..345dcc79db 100644 --- a/react-virtualized/index.d.ts +++ b/react-virtualized/index.d.ts @@ -118,6 +118,23 @@ declare module "react-virtualized" { type ScrollSyncProps = any; export class ScrollSync extends React.Component { } - type WindowScrollerProps = any; - export class WindowScroller extends React.Component { } + export module WindowScroller { + export type OnResizeArg = { + height: number; + } + export type OnScrollArg = { + scrollTop: number; + } + export type RenderCallbackArg = { + height: number; + scrollTop: number; + isScrolling: boolean; + } + export type Props = { + onScroll?: (arg: OnScrollArg) => void; + onResize?: (arg: OnResizeArg) => void; + // TODO `children` should be typed here + }; + } + export class WindowScroller extends React.Component { } } diff --git a/react-virtualized/react-virtualized-tests.tsx b/react-virtualized/react-virtualized-tests.tsx index 1cb9d97c1b..6c799746fd 100644 --- a/react-virtualized/react-virtualized-tests.tsx +++ b/react-virtualized/react-virtualized-tests.tsx @@ -291,9 +291,11 @@ function ScrollSyncTest() { } function WindowScrollerTest() { + const onScroll = function({scrollTop}: WindowScroller.OnScrollArg) {}; + const onResize = function({height}: WindowScroller.OnResizeArg) {}; ReactDOM.render( - - {({ height, isScrolling, scrollTop }) => ( + + {({ height, isScrolling, scrollTop }: WindowScroller.RenderCallbackArg) => ( , document.getElementById('example') ); + // test that onScroll & onResize are optional + ReactDOM.render( + , + document.getElementById('example') + ); }