프로젝트의 라이브러리에서 손상된 형식 서명을 어떻게 수정합니까?

밀리 무스

내 프로젝트에서 debug@types/debug패키지를 사용하고 있으며 @types/debug내가 아는 코드의 타이핑을 깨는 최근 업데이트 가 유효합니다.

선언 병합을 사용하여 프로젝트의 타이핑을 깔끔하게 수정하는 방법이 있습니까? 그래서 업스트림으로 만들거나 전체 .d.ts를 복사하기 위해 수정을 기다릴 필요가 없습니까?

관련 부분 @types/debug은 다음과 같습니다.

declare var debug: debug.Debug;

export = debug;

declare namespace debug {
    type IDebugger = Debugger;
    interface Debugger {
        log: (v: any) => string;
    }
}

내 자신의 .d.ts 파일을 추가했습니다.

declare module 'debug' {
    interface Debugger {
        log: (...args: any[]) => any;
    }
}

하지만 이제 원래 선언 파일에서 다른 멤버를 사용하려고하면 오류가 발생합니다. "Module 'debug'에는 내 보낸 멤버가 없습니다. '등이 발생합니다. 내 자신의 .d.ts 파일을 추가하면 병합되지 않는 것 같습니다. 원본과 함께 사용하지만 해당 모듈에 대한 유일한 선언으로 사용됩니다. 왜 이런 일이 발생하고 내가 원하는 것을 어떻게 할 수 있습니까? 즉, 선언을 올바르게 병합하는 것입니까?

Karol Majewski

의 서명은 log함수 유형으로 정의되어 있으므로 확장 할 수 없습니다 . 인터페이스로 정의 되었다면 오버로드를 추가하여 가능했을 것입니다.

interface Debugger {
    log: Logger;
}

interface Logger {
  (...args: any[]): any
  (arg: any): string
}

그래서 당신은 무엇을 할 수 있습니까?

  1. 다른 버전의 타이핑을 설치하고 잠급니다 ( --save-exact실행시 플래그 사용 npm install).
  2. 유형을 로컬로 재정의하고 업스트림 정의가 수정 될 때까지 계속 사용합니다. 이상적으로는 변경 사항을 DefinitelyTyped에 직접 기여하십시오.

두 번째 솔루션에 관해서는 확장이 옵션이 아니기 때문에 정의 전체를 다시 만들고 변경 사항을 추가해야합니다. 결과는 다음과 같습니다.

debug.d.ts

declare module 'debug' {
  var debug: debug.Debug & { debug: debug.Debug, default: debug.Debug };

  namespace debug {
    interface Debug {
      (namespace: string): Debugger;
      coerce: (val: any) => any;
      disable: () => void;
      enable: (namespaces: string) => void;
      enabled: (namespaces: string) => boolean;

      names: RegExp[];
      skips: RegExp[];

      formatters: Formatters;
    }

    type IDebug = Debug;

    interface Formatters {
      [formatter: string]: (v: any) => string;
    }

    type IDebugger = Debugger;

    interface Debugger {
      (formatter: any, ...args: any[]): void;

      enabled: boolean;
      log: Logger
      namespace: string;
      extend: (namespace: string, delimiter?: string) => Debugger;
    }

    interface Logger {
      (...args: any[]): any
      (arg: any): string
    }
  }

  export = debug;
}

이러한 선언 파일은 프로젝트에 포함되어야합니다.

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Java 태스크에서 Java 라이브러리 경로를 어떻게 설정합니까?

Java 앱에서 대상 라이브러리를 사용하려면 어떻게해야합니까?

Swift에서 하나 이상의 프로토콜을 준수하는 특정 유형의 변수를 어떻게 선언 할 수 있습니까?

PLT 방식 (사전 라켓)에서 라이브러리를 어떻게 요구합니까?

Meteor 프로젝트에서 수동 작업을 어떻게 실행합니까?

x : UWP에서 누락 된 유형-기본 컨트롤 스타일을 어떻게 재정의합니까?

Google 양식 / 스프레드 시트에서 양식 제출의 응답을 어떻게 수정합니까?

VS2017의 .net 프로젝트에서 netstandard 프로젝트를 어떻게 참조합니까?

matplotlib에서 축 레이블의 형식을 어떻게 변경합니까?

Windows 정적 라이브러리에서 내 보낸 함수를 어떻게 식별합니까?

부스트 그래프 라이브러리에서 distance_recorder는 어떻게 작동합니까?

완료된 Django 프로젝트를 가상 환경에서 어떻게 이동해야합니까?

ld에서 사용하는 라이브러리의 경로를 어떻게 알 수 있습니까?

tcomb-form 라이브러리에서 t.Date는 어떤 날짜 형식을 허용합니까?

라이브러리 프로젝트에서 주 프로젝트로 종속성을 복사하려면 어떻게해야합니까?

robotframework에서 내장 라이브러리를 통해 전달 된 변수를 어떻게 추출합니까?

com interop에 등록 된 클래스 라이브러리 프로젝트에서 강력하지 않은 유형의 DLL을 어떻게 참조 할 수 있습니까?

MVC 프로젝트에서 LINQ를 사용하여 조인 된 테이블의 값을 어떻게 정렬 할 수 있습니까?

단어와 세미콜론으로 구분 된 정규식에서 문장을 어떻게 추출합니까?

명령 줄에서 부모 SConstruct를 호출하여 빌드 할 SConscript 파일에 정의 된 대상 라이브러리를 지정하려면 어떻게해야합니까?

Coq 라이브러리의 기본형을 어떻게 사용합니까?

이 형식의 데이터 프레임에서 NaN 및 이상 값을 제거하여 평균을 어떻게 계산할 수 있습니까?

내 봇 프로젝트에서 Microsoft QnA Maker의 이스케이프 시퀀스가 포함 된 질문을 어떻게 구문 분석합니까?

C # 프로젝트가 참조 된 라이브러리에서 최신 F # 형식 선언을 선택하지 않습니다.

VS 2019 형식 프로젝트간에 어셈블리 정보를 어떻게 공유 할 수 있습니까?

Eclipse에서 사용자 정의 파일 (생성 된 모든 프로젝트에 대해 빌드 됨)을 어떻게 추가 할 수 있습니까?

명명 된 파이프에서 읽을 때 cat 명령을 중지하려면 어떻게합니까?

파이썬에서 클릭 명령 후 변수에 저장된 값을 어떻게 변경할 수 있습니까 (라이브러리 가져 오기 클릭)

Typescript에서 형식화 된 변수를 같은 이름의 형식으로 사용하려면 어떻게해야합니까?