2024년 12월 26일 목요일

타입스크립트 기존 컴포넌트에 다른 타입 추가 하기

1. 유니온 타입

interface Props {
article : Article|CompactArticle;
}

 사용후 타입가드 

export const isArticleNotCompact = (props:CompactArticle|Article): props is Article => {
return 'pubdate' in props && 'author' in props ;
}
{
isArticleNotCompact(article) &&//Caompact에는 없는 속성들 처리
<>
<div className="entry-meta font-medium position-relative d-flex mt-md-4 d-none d-md-block d-lg-block">
<span> {TimeAgo(article.pubdate as string)}</span>
<span className={article.author && "vertical-divider ml-5 mr-5"}></span><span >{article.author}</span>
</div>
<div className="entry-meta font-medium position-relative d-flex mt-md-4 d-block d-md-none d-lg-none">
<span> {TimeAgo(article.pubdate as string)}</span>
</div>
</>
}

2. extends 하기

export interface CompactArticle {
id: number
title?: string | undefined
badge? : string | undefined
sub_title?: string | undefined
summary?: string | undefined
image?: string | undefined
url: string
related?: []|Related[] | undefined
}
export interface Article extends CompactArticle{
author? : string | undefined
summary? : string | undefined
description? : string | undefined
// 필요한 타입 추가 및 재정의

}

타입을 extends 하면 기존의 컴포넌트를 바꾸지 않고도 사용 가능

2024년 12월 24일 화요일

Cannot find module 'next/dist/server/future/route-modules/pages/vendored/contexts/amp-context'

 nextjs를 output='standalone'으로 빌드시 

Cannot find module 'next/dist/server/future/route-modules/pages/vendored/contexts/amp-context'

오류가 발생


원인 

build 하고 standalone/.next/node_modules/next/dist 폴더에

shared 디렉토리만 존재하고 있음. 모듈 빌드가 제대로 되지 않은듯


해결책

nextjs 버전을 변경한다. 

^14.2.21 버전에서 ^14.2.13으로 변경