Next.js next/image 관련 코드 까보기 (23.11.19)
packages/next/src/shared/lib/get-img-props.ts
파일 상단에 보면 ImageProps 라는 타입이 정의되어있다. Omit은 특정 속성만 제거한 타입을 선언한다. JSX.IntrinsicElements['img'] 타입에서 'src' | 'srcSet' | 'ref' | 'alt' | 'width' | 'height' | 'loading'을 제거하고, &로 추가 타입들을 선언한다.
export type ImageProps = Omit<
JSX.IntrinsicElements["img"],
"src" | "srcSet" | "ref" | "alt" | "width" | "height" | "loading"
> & {
src: string | StaticImport;
alt: string;
width?: number | `${number}`;
height?: number | `${number}`;
fill?: boolean;
loader?: ImageLoader;
quality?: number | `${number}`;
priority?: boolean;
loading?: LoadingValue;
placeholder?: PlaceholderValue;
blurDataURL?: string;
unoptimized?: boolean;
/**
* @deprecated Use `onLoad` instead.
* @see https://nextjs.org/docs/app/api-reference/components/image#onload
*/
onLoadingComplete?: OnLoadingComplete;
/**
* @deprecated Use `fill` prop instead of `layout="fill"` or change import to `next/legacy/image`.
* @see https://nextjs.org/docs/api-reference/next/legacy/image
*/
layout?: string;
/**
* @deprecated Use `style` prop instead.
*/
objectFit?: string;
/**
* @deprecated Use `style` prop instead.
*/
objectPosition?: string;
/**
* @deprecated This prop does not do anything.
*/
lazyBoundary?: string;
/**
* @deprecated This prop does not do anything.
*/
lazyRoot?: string;
};getWidths
해당 함수에서는 next.config.js 에 설정되어 있는 deviceSizes와 allSizes를 참조하여 width를 설정한다.
Last updated