본문 바로가기

개발하자

node in typescript(노드 v17.6)에서 native fetch를 사용하려면 어떻게 해야 합니까

반응형

node in typescript(노드 v17.6)에서 native fetch를 사용하려면 어떻게 해야 합니까

콘솔에서 명령을 실행하면 이제 기본적으로 활성화됩니다(노드 버전 >=17.6). 아래를 보다

native fetch with node

하지만 타이프스크립트 레이어를 추가하면 항상 다음과 같은 결과가 나옵니다.

어떻게 해결할 수 있을까요?

background idea: fetch를 네이티브로 사용하고 의존성을 제거한다

및 일반 설정:

참고 항목:




현재 사용하기 쉬운/게으른 솔루션은 두 가지뿐입니다(적절한 솔루션이 있는지 확인하십시오):

  1. 당신의 것을 설정할 수 있다
  2. 사용하는 파일의 맨 위에 추가할 수 있습니다

나는 개인적으로 이 해킹을 사용하는 위치를 더 쉽게 파악할 수 있기 때문에 #2를 선호한다.




타이프스크립트 패키지에서 전체 libom을 가져오거나 일부 사람들처럼 유형에 대한 노드 가져오기 패키지를 추가하지 마십시오. 원인...

  1. 자유도를 가져오면 노드 환경에서는 사용할 수 없는 많은 것들이 글로벌에 추가됩니다.
  2. 노드 페치를 프로젝트에 유형에 대해서만 추가하면 필요한 유형만 추가되지만 안타깝게도 W3C 페치() 사양에는 불만이 없습니다. 참조:

실제로 어느 정도 정확한 것은 "언디치"라는 패키지를 수입하는 것이다. 이 패키지는 노드의 페치(fetch) 구현의 기본이므로 올바른 유형을 제공한다. 출처:

프로젝트에 다음과 같은 내용의 .d.ts 파일을 추가하는 것을 추천합니다:

import * as undici_types from 'undici';

declare global {
  export const {
    fetch,
    FormData,
    Headers,
    Request,
    Response,
  }: typeof import('undici');

  type FormData = undici_types.FormData;
  type Headers = undici_types.Headers;
  type HeadersInit = undici_types.HeadersInit;
  type BodyInit = undici_types.BodyInit;
  type Request = undici_types.Request;
  type RequestInit = undici_types.RequestInit;
  type RequestInfo = undici_types.RequestInfo;
  type RequestMode = undici_types.RequestMode;
  type RequestRedirect = undici_types.RequestRedirect;
  type RequestCredentials = undici_types.RequestCredentials;
  type RequestDestination = undici_types.RequestDestination;
  type ReferrerPolicy = undici_types.ReferrerPolicy;
  type Response = undici_types.Response;
  type ResponseInit = undici_types.ResponseInit;
  type ResponseType = undici_types.ResponseType;
}

이것은 분명히 당신이 선택한 패키지 관리자를 통해서도 'undici' 패키지를 설치할 것을 요구한다! https://www.npmjs.com/package/undici

이것에 매우 관심이 있는 사람들을 위해, Definitely에서 진행중인 토론이 있다github에 저장소를 입력했습니다:




@zVictor가 말한 것과 비슷하지만, 나는 해킹을 그것의 파일로 포장하는 것을 추천한다.

다음 내용으로 프로젝트에 "fetch.ts" 파일을 만듭니다:

/// <reference lib="dom" />

type _Response = Response;
const _fetch = fetch;

export type { _Response as Response };
export { _fetch as fetch };

그러면 프로젝트의 나머지 부분에서 가져올 수 있으므로 문으로 코드베이스를 어수선하게 만들 필요가 없습니다.




이 GitHub 문제는 유지 관리자 중 한 명의 최신 의견을 인용하기 위해 아직 열려 있습니다,

짧은 버전은 아직 아무도 이 패키지에 페치 타입을 구현하지 않았다는 것이다. 어떻게 대처하는 것이 최선인지에 대한 생각들이 있지만 실제로 이 패키지의 유지자들 사이에 합의가 있는지는 모르겠습니다. 만약 당신이 그것을 돕고 싶다면, DT는 기고자로 시작하기 위한 좋은 지침을 가지고 있고, 나는 이 스레드에 있는 몇몇 사람들이 MR을 검토하고 싶어할 것이라고 확신한다.

제안된 해결 방법이 있지만, 우리가 확실히 알고 있는 것처럼 조항 위에서 사용하는 것이 가장 쉬운 방법일 수도 있다고 생각하기 때문에 여기서 확인할 필요는 없습니다.


반응형