Custom Type을 한 곳에서 관리 하는 법
각각의 component와 pages마다 type을 선언할 때 마다, type이나 interface를 재선언해주는것이 올바르지 않다. 라고 생각했고, 다른 한 파일에 타입을 지정해놓고 필요할때 마다 꺼내서 사용하면 좋을 것 같았다.
분명 프로젝트 내에서 필요한 기능이기 때문에 당연히 NextJS 프레임 워크에서 구현이 되어 있었다.
next-env.d.ts
nextjs 프로젝트를 생성 했을때, 위의 파일이 자동적으로 생성된다.
이 파일은 nextjs 공식문서에서도 타입과 인터페이스를 관리하는 파일로 해석한다.
좋은점이 이 파일에 타입을 지정 했을 시, 자동으로 import없이 타입들을 사용 가능하다는 것이 큰 장점이다.
api url같은 상수 값도 여기에 type지정이 가능하다.
// next-env.d.ts
/// <reference types="next" />
/// <reference types="next/image-types/global" />
// 예시: 전역적으로 사용될 사용자 정의 타입
interface CustomType {
id: string;
name: string;
}
type PropsVocaItem = {
bookmark: boolean;
content: string;
englishTitle: string;
id: number;
koreanTitle: string;
thumbnailName: string;
thumbnailPath: string;
}
// 예시: 프로젝트 전체에서 사용될 상수
declare const API_BASE_URL: string;
// NOTE: This file should not be edited
// see https://nextjs.org/docs/basic-features/typescript for more information.
이런식으로, 타입을 여기다 지정하고 다른 폴더나 파일에서 타입지정을 할 수 있다,
이거 몰라서 계속 타입선언 해줬는데 너무 편한 기능인 것 같다.
대신 무조건 선언해줘야 하는 부분이 있다.
tsconfig.json에 반드시 include해줘야하는데
이방법은 tsconfig.json 내부에 include 배열 안에 "next-env.d.ts"를 반드시 추가해줘야 한다.
이 구분은 기본적으로 빌드시에 자동생성되어 있지만 없다면 추가해주자
// tsconfig.json
{
"compilerOptions": {
"target": "es5",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"incremental": true,
"plugins": [
{
"name": "next"
}
],
"paths": {
"@/*": [
"./*"
]
},
"forceConsistentCasingInFileNames": true
},
"include": [
"next-env.d.ts",
"**/*.ts",
"**/*.tsx",
".next/types/**/*.ts"
],
"exclude": [
"node_modules"
]
}
반응형
'FrontEnd' 카테고리의 다른 글
[React] 재사용 가능한 Custom Modal 만들기 (1) | 2024.01.30 |
---|---|
[NextJS] JEST로 NextJS 테스트 코드 작성하기 (2) | 2024.01.05 |
[NextJS] NextJS 14의 변경점 및 업데이트 알아보기 (0) | 2023.11.22 |
[NextJS] JWT토큰을 이용하여 로그인 기능 구현하기 (0) | 2023.11.13 |