diff options
-rw-r--r-- | .changeset/long-monkeys-exercise.md | 5 | ||||
-rw-r--r-- | packages/astro/src/assets/types.ts | 6 | ||||
-rw-r--r-- | packages/astro/src/type-utils.ts | 5 |
3 files changed, 13 insertions, 3 deletions
diff --git a/.changeset/long-monkeys-exercise.md b/.changeset/long-monkeys-exercise.md new file mode 100644 index 000000000..f3f88fa14 --- /dev/null +++ b/.changeset/long-monkeys-exercise.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Fixes the `getImage` options type so it properly extends `ImageTransform` diff --git a/packages/astro/src/assets/types.ts b/packages/astro/src/assets/types.ts index 6de28d43c..7b6b2893a 100644 --- a/packages/astro/src/assets/types.ts +++ b/packages/astro/src/assets/types.ts @@ -1,4 +1,4 @@ -import type { WithRequired } from '../type-utils.js'; +import type { OmitPreservingIndexSignature, Simplify, WithRequired } from '../type-utils.js'; import type { VALID_INPUT_FORMATS, VALID_OUTPUT_FORMATS } from './consts.js'; import type { ImageService } from './services/service.js'; @@ -66,10 +66,10 @@ export type SrcSetValue = UnresolvedSrcSetValue & { /** * A yet to be resolved image transform. Used by `getImage` */ -export type UnresolvedImageTransform = Omit<ImageTransform, 'src'> & { +export type UnresolvedImageTransform = Simplify<OmitPreservingIndexSignature<ImageTransform, 'src'> & { src: ImageMetadata | string | Promise<{ default: ImageMetadata }>; inferSize?: boolean; -} & { +}> & { [isESMImport]?: never; }; diff --git a/packages/astro/src/type-utils.ts b/packages/astro/src/type-utils.ts index daf1052e1..cbb112f79 100644 --- a/packages/astro/src/type-utils.ts +++ b/packages/astro/src/type-utils.ts @@ -16,6 +16,11 @@ export type OmitIndexSignature<ObjectType> = { : KeyType]: ObjectType[KeyType]; }; +// This is an alternative `Omit<T, K>` implementation that _doesn't_ remove the index signature of an object. +export type OmitPreservingIndexSignature<T, K extends PropertyKey> = { + [P in keyof T as Exclude<P, K>]: T[P] +}; + // Transform a string into its kebab case equivalent (camelCase -> kebab-case). Useful for CSS-in-JS to CSS. export type Kebab<T extends string, A extends string = ''> = T extends `${infer F}${infer R}` ? Kebab<R, `${A}${F extends Lowercase<F> ? '' : '-'}${Lowercase<F>}`> |