feat: uncomment polymorphic type (#7069)
This commit is contained in:
parent
dd8dd6b31e
commit
c1669c0011
2 changed files with 23 additions and 3 deletions
17
.changeset/two-carrots-smile.md
Normal file
17
.changeset/two-carrots-smile.md
Normal file
|
@ -0,0 +1,17 @@
|
|||
---
|
||||
'astro': minor
|
||||
---
|
||||
|
||||
Added `Polymorphic` type helper to `astro/types` to easily create polymorphic components:
|
||||
|
||||
```astro
|
||||
---
|
||||
import { HTMLTag, Polymorphic } from 'astro/types';
|
||||
|
||||
type Props<Tag extends HTMLTag> = Polymorphic<{ as: Tag }>;
|
||||
|
||||
const { as: Tag, ...props } = Astro.props;
|
||||
---
|
||||
|
||||
<Tag {...props} />
|
||||
```
|
9
packages/astro/types.d.ts
vendored
9
packages/astro/types.d.ts
vendored
|
@ -9,6 +9,9 @@ export type HTMLAttributes<Tag extends HTMLTag> = Omit<
|
|||
keyof Omit<AstroBuiltinAttributes, 'class:list'>
|
||||
>;
|
||||
|
||||
// TODO: Enable generic/polymorphic types once compiler output stabilizes in the Language Server
|
||||
// type PolymorphicAttributes<P extends { as: HTMLTag }> = Omit<(P & HTMLAttributes<P['as']>), 'as'> & { as?: P['as'] };
|
||||
// export type Polymorphic<P extends { as: HTMLTag }> = PolymorphicAttributes<Omit<P, 'as'> & { as: NonNullable<P['as']>}>;
|
||||
type PolymorphicAttributes<P extends { as: HTMLTag }> = Omit<P & HTMLAttributes<P['as']>, 'as'> & {
|
||||
as?: P['as'];
|
||||
};
|
||||
export type Polymorphic<P extends { as: HTMLTag }> = PolymorphicAttributes<
|
||||
Omit<P, 'as'> & { as: NonNullable<P['as']> }
|
||||
>;
|
||||
|
|
Loading…
Reference in a new issue