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 에 설정되어 있는 deviceSizesallSizes를 참조하여 width를 설정한다.

Last updated