Skip to content

Instantly share code, notes, and snippets.

@webflo-dev
Created June 21, 2021 07:48
Show Gist options
  • Save webflo-dev/538eb190be65ae44add1c77338080470 to your computer and use it in GitHub Desktop.
Save webflo-dev/538eb190be65ae44add1c77338080470 to your computer and use it in GitHub Desktop.
Conditionnal Props in React/TypeScript
type DrawerProps = { fullName: string } & (
| { shape: 'circle'; radius: number }
| { shape: 'square'; width: number }
| { shape: 'rectangle'; width: number; height: number }
);
type OneOrTheOtherProps =
| { collapsed?: true; expanded?: never }
| { collapsed?: never; expanded?: true };
type PanelProps =
| { collapsable: true; defaultCollpsed?: boolean }
//| { collapsable: true; defaultCollpsed?: true }
| { collapsable?: never; defaultCollpsed?: never };
type DropdownProps<T> = T extends number | string
? {
data: Array<string | number>;
labelProp?: never;
valueProp?: never;
}
: {
data: Array<T>;
labelProp: keyof T;
valueProp: keyof T;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment