diff --git a/.changeset/grumpy-towns-stick.md b/.changeset/grumpy-towns-stick.md new file mode 100644 index 0000000000..0056469213 --- /dev/null +++ b/.changeset/grumpy-towns-stick.md @@ -0,0 +1,5 @@ +--- +'@backstage/ui': patch +--- + +Cleaned up `useDefinition` `ownProps` types to remove never-typed ghost properties from autocomplete. diff --git a/packages/ui/src/hooks/useDefinition/types.ts b/packages/ui/src/hooks/useDefinition/types.ts index 91ebdb8ef5..45ce5e3dc8 100644 --- a/packages/ui/src/hooks/useDefinition/types.ts +++ b/packages/ui/src/hooks/useDefinition/types.ts @@ -81,10 +81,19 @@ type ResolvedOwnProps< [K in keyof PropDefs & keyof P]: ResolvePropType; }; -type ChildrenProps = - Bg extends 'provider' - ? { childrenWithBgProvider: ReactNode; children?: never } - : { children: ReactNode; childrenWithBgProvider?: never }; +type BaseOwnProps< + D extends ComponentConfig, + P extends Record, +> = { + classes: Record; +} & ResolvedOwnProps; + +type ResolveBgProps< + D extends ComponentConfig, + TBase, +> = D['bg'] extends 'provider' + ? Omit & { childrenWithBgProvider: ReactNode } + : TBase; type DataAttributeKeys = { [K in keyof PropDefs]: PropDefs[K] extends { dataAttribute: true } @@ -122,10 +131,7 @@ export interface UseDefinitionResult< D extends ComponentConfig, P extends Record, > { - ownProps: { - classes: Record; - } & ResolvedOwnProps & - ChildrenProps; + ownProps: ResolveBgProps>; // Rest props excludes both propDefs keys AND utility prop keys restProps: keyof Omit> extends never