• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

안녕하세요, 제로초님 타입스크립트 axios 분석 강의보고 궁금한점이 있어서 질문드립니다

23.11.04 23:29 작성 23.11.05 11:41 수정 조회수 221

1

[제로초 강좌 질문 필독 사항입니다]
질문에는 여러분에게 도움이 되는 질문과 도움이 되지 않는 질문이 있습니다.
도움이 되는 질문을 하는 방법을 알려드립니다.

https://www.youtube.com/watch?v=PUKOWrOuC0c

```

export interface AxiosInstance extends Axios {
  <T = any, R = AxiosResponse<T>, D = any>(config: AxiosRequestConfig<D>): Promise<R>;
  <T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<R>;

  defaults: Omit<AxiosDefaults, 'headers'> & {
    headers: HeadersDefaults & {
      [key: string]: AxiosHeaderValue
    }
  };
}```

해당 axios 분석 영상을 보고 질문이있습니다,
AxiosInstance 인터페이스에 익명함수 시그니처 형식으로 타입정의가 되어있는데요

나름 찾아본결과 이거는 다형성 관련해서 다중오버로딩할때 편하다라고는 생각은 했습니다,,,

근데 제가 궁금한점은 제가 일반적으로 axios 기본기능만 쓰면 사실 extends해서 가져오니까요,
굳이 안써도잘 동작 할거같아서 의문이 들었습니다,,
제가 나름 생각한 써져있는 이유는 axios라이브러리를 이용해서 자체 확장을 할때 필요 한가라고도 생각이드는데요 막연히 생각이들고 예상이라 정확히 어떨때 쓸 의도로 둔건지 궁금해서 질문드립니다

요약: AxiosInstance 에 익명함수 시그니처의 의도가 뭘까요 extends 해오는거라 없어도 될거같은데요 어떤상황에 대비해서 추가된 코드일까요?

답변 1

답변을 작성해보세요.

1

axios.get(주소) 이런식으로 할 수 있는데

axios({ method: 'get', url: 주소 })나 axios(주소, { method: 'get' }) 이런 식으로도 가능합니다. 이래서 익명 함수 시그니처가 있는 겁니다.

 

jusssn님의 프로필

jusssn

질문자

2023.11.05

감사합니다 제로초님, 하나더 궁금한게 있는데요 그럼

 post<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<R>;
  put<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<R>;
  patch<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<R>;
  postForm<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<R>;
  putForm<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<R>;
  patchForm<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<R>;```

해당 메서드들까지 쓰려면 시그니처가 더 추가되어야할것 같은데요 없어도 되나요?

export interface AxiosInstance extends Axios {
  <T = any, R = AxiosResponse<T>, D = any>(config: AxiosRequestConfig<D>): Promise<R>;
  <T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<R>;
  // 이 시그니처도 추가 되어야하는거 아닌가요??
  <T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<R>;

  defaults: Omit<AxiosDefaults, 'headers'> & {
    headers: HeadersDefaults & {
      [key: string]: AxiosHeaderValue
    }
  };
}

 


아뇨 필요없습니다. axios(주소, 데이터, 설정)이라는 사용법은 없습니다. 얘는 post put patch 같은 메서드랑 관련도 없고요.

다른 언어랑 헷갈리고 계신것 같은데요.

jusssn님의 프로필

jusssn

질문자

2023.11.05

감사합니다 제가 헷갈린 부분이 있네요!!
아 그렇네요 제가 아예 잘못생각했네요 감사합니다!!!
axios.path(주소, 데이터, 설정)로 착각했네요

axios(주소, 데이터, 설정) 라고 해주셔서 이해 되었습니다