TypeScript Generic Type Definition

박종혁·2021년 9월 1일
0

Generic type definition

function getData<T>(data: T[]): T[] {
  return data
}

getData<string>(['hi','hello'])
getData<number>([10, 9, 8, 7])
getData<boolean>([true, false, true])

선언시 먼저 타입 잡고 자동으로 뒤쪽 인식
간편!

Type error catch

모듈의 버전별로 option값이 다름
공식 문서 통해 option값 체크 후 맞는 형식으로 작성(특히 객체 내 key값이나, 함수 인자값)

//express를 이용한 쿠키 옵션 설정시 발생한 상황

  const cookieOption = {
            domain: process.env.DOMAIN,
            path: "/",
            maxAge: 30 * 60 * 1000,
            sameSite: "none",
            httpOnly: true,
            secure: true,
          };

 res.cookie("authorization", token, cookieOption);

/*
이 호출과 일치하는 오버로드가 없습니다.
  오버로드 1/3('(name: string, val: string, options: CookieOptions): Response<any, Record<string, any>>')에서 다음 오류가 발생했습니다.
    '{ domain: string | undefined; path: string; maxAge: number; sameSite: string; httpOnly: boolean; secure: boolean; }' 형식의 인수는 'CookieOptions' 형식의 매개 변수에 할당될 수 없습니다.
      'sameSite' 속성의 형식이 호환되지 않습니다.
        'string' 형식은 'boolean | "none" | "lax" | "strict" | undefined' 형식에 할당할 수 없습니다.
  오버로드 2/3('(name: string, val: any, options: CookieOptions): Response<any, Record<string, any>>')에서 다음 오류가 발생했습니다.
    '{ domain: string | undefined; path: string; maxAge: number; sameSite: string; httpOnly: boolean; secure: boolean; }' 형식의 인수는 'CookieOptions' 형식의 매개 변수에 할당될 수 없습니다.ts(2769)
const cookieOption: {
    domain: string | undefined;
    path: string;
    maxAge: number;
    sameSite: string;
    httpOnly: boolean;
    secure: boolean;
}
*/

const newOption = {
  ...cookieOption,
sameSite: "none" as "none"
}

//모듈 내의 정의된 타입으로 강제로 입력해줌으로서 해결 ("none" type)
//가변값의 경우 이런 해결방식은 좋아보이지 않으나 
//현재 상황에서는 옵션을 변경할 일이 없어 사용해도 무방하다고 판단함
profile
메모 메모

0개의 댓글