;
diff --git a/packages/react-ui/lib/types/polymorphic-component.ts b/packages/react-ui/lib/types/polymorphic-component.ts
new file mode 100644
index 00000000000..fc8a5489580
--- /dev/null
+++ b/packages/react-ui/lib/types/polymorphic-component.ts
@@ -0,0 +1,34 @@
+import React from 'react';
+
+import { Merge } from '../../typings/utility-types';
+
+type PropsWithComponent = P & {
+ /**
+ * Компонент, используемый в качестве корневого узла.
+ */
+ component?: T;
+};
+
+export type PolymorphicPropsWithoutRef
= Merge<
+ T extends keyof JSX.IntrinsicElements
+ ? React.PropsWithoutRef
+ : React.ComponentPropsWithoutRef,
+ PropsWithComponent
+>;
+
+export type PolymorphicPropsWithRef
= Merge<
+ T extends keyof JSX.IntrinsicElements ? React.PropsWithRef : React.ComponentPropsWithRef,
+ PropsWithComponent
+>;
+
+type PolymorphicExoticComponent
, T extends React.ElementType = React.ElementType> = Merge<
+ React.ExoticComponent
,
+ {
+ (props: PolymorphicPropsWithRef): React.ReactElement | null;
+ }
+>;
+
+export type PolymorphicForwardRefExoticComponent
= Merge<
+ React.ForwardRefExoticComponent
,
+ PolymorphicExoticComponent
+>;
diff --git a/packages/react-ui/typings/utility-types.d.ts b/packages/react-ui/typings/utility-types.d.ts
index 22aa207432a..8e3ce3349fd 100644
--- a/packages/react-ui/typings/utility-types.d.ts
+++ b/packages/react-ui/typings/utility-types.d.ts
@@ -19,3 +19,5 @@ type Enumerate = Acc['length'] exte
: Enumerate;
export type Range = Exclude, Enumerate>;
+
+export type Merge = Omit & U;