diff options
Diffstat (limited to 'preact/compat/test/ts/memo.tsx')
-rw-r--r-- | preact/compat/test/ts/memo.tsx | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/preact/compat/test/ts/memo.tsx b/preact/compat/test/ts/memo.tsx new file mode 100644 index 0000000..4e89e26 --- /dev/null +++ b/preact/compat/test/ts/memo.tsx @@ -0,0 +1,56 @@ +import * as React from '../../src'; +import { expectType } from './utils'; + +interface MemoProps { + required: string; + optional?: string; + defaulted: string; +} + +interface MemoPropsExceptDefaults { + required: string; + optional?: string; +} + +const ComponentExceptDefaults = () => <div></div>; + +const ReadonlyBaseComponent = (props: Readonly<MemoProps>) => ( + <div>{props.required + props.optional + props.defaulted}</div> +); +ReadonlyBaseComponent.defaultProps = { defaulted: '' }; + +const BaseComponent = (props: MemoProps) => ( + <div>{props.required + props.optional + props.defaulted}</div> +); +BaseComponent.defaultProps = { defaulted: '' }; + +// memo for readonly component with default comparison +const MemoedReadonlyComponent = React.memo(ReadonlyBaseComponent); +expectType<React.FunctionComponent<MemoProps>>(MemoedReadonlyComponent); +export const memoedReadonlyComponent = ( + <MemoedReadonlyComponent required="hi" /> +); + +// memo for non-readonly component with default comparison +const MemoedComponent = React.memo(BaseComponent); +expectType<React.FunctionComponent<MemoProps>>(MemoedComponent); +export const memoedComponent = <MemoedComponent required="hi" />; + +// memo with custom comparison +const CustomMemoedComponent = React.memo(BaseComponent, (a, b) => { + expectType<MemoProps>(a); + expectType<MemoProps>(b); + return a.required === b.required; +}); +expectType<React.FunctionComponent<MemoProps>>(CustomMemoedComponent); +export const customMemoedComponent = <CustomMemoedComponent required="hi" />; + +const MemoedComponentExceptDefaults = React.memo<MemoPropsExceptDefaults>( + ComponentExceptDefaults +); +expectType<React.FunctionComponent<MemoPropsExceptDefaults>>( + MemoedComponentExceptDefaults +); +export const memoedComponentExceptDefaults = ( + <MemoedComponentExceptDefaults required="hi" /> +); |