programing

TypeScript의 "declare class"와 "interface"의 차이점은 무엇입니까?

lastcode 2023. 2. 13. 20:31
반응형

TypeScript의 "declare class"와 "interface"의 차이점은 무엇입니까?

TypeScript에서 .d.ts 소스 선언 파일을 작성할 때 어떤 것이 더 좋으며 그 이유는 무엇입니까?

declare class Example {
    public Method(): void; 
}

또는

interface Example {
    Method(): void;
}

인터페이스에는 스태틱메서드를 사용할 수 없기 때문에 클래스도 사용할 필요가 있습니다.둘 다 JS 출력을 생산하지 않기 때문에 상관없을까요?

interface단순히 물체의 모양을 묘사하고 싶을 때 사용합니다.인터페이스에는 코드 생성은 없습니다.타입 시스템의 아티팩트일 뿐입니다., 클래스 클래스의 코드 생성 유무에 따라 다릅니다.implements절을 클릭합니다.

declare class외부적으로 존재하는 기존 클래스(보통은 TypeScript 클래스, 그러나 항상 그렇지는 않음)를 기술하는 경우(예를 들어 2개의 .js 파일로 컴파일되는 .ts 파일이 있으며 둘 다 다음 경유로 포함됩니다).script태그를 지정합니다).에서 class를 사용합니다.extends( 타입이 a(베이스 타입)인지 아닌지에 declare class 일반 or or orclass컴파일러는 시제품 체인 및 포워딩 컨스트럭터 등을 연결하기 위한 모든 코드를 생성합니다.

에서 declare class생성된 코드가 런타임 징후가 없는 개체를 참조하기 때문에 런타임 오류가 발생합니다.

단순히 「」라고 「」라고 하는 입니다.implement 할 .declare class모든 멤버를 직접 재할당해야 하며, 기본 클래스에서 재사용되는 코드를 이용하지 않습니다.실제로 실행 시 프로토타입 체인을 체크하는 함수는 기본 클래스의 인스턴스가 아닌 오브젝트를 거부합니다.

C+++ 백그라운드를 가지고 있다면 짜 려 가 c배대 think ner of to get있략면적,생 really haveground roughly, can youdy back a면다로각해보으interface as ~하듯이typedef ★★★★★★★★★★★★★★★★★」declare class로 서 asextern이 컴파일 유닛의 정의를 엄격히 제한하지 않는 건설 또는입니다.이 컴파일 단위에서 완전히 정의가 없는 생성자의 선언입니다.

순수 소비 측면(예: 새 유형)에서 비 소 면 측 형 ) 로 서 from a않에 types imper consumative고 diffe새 code필유를추드지성운, newinterface ★★★★★★★★★★★★★★★★★」declare class 수 없다new,생각이라면 할 수 있다extend/implement 중 를 새로운 으로 합니다.class 때문에, , 을 선택해야 합니다.interface그리고.declare class둘 중 하나만 작동됩니다.

다음 두 가지 규칙이 도움이 됩니다.

  • 생성자 함수와 정렬하는 형식의 이름입니다(와 함께 호출할 수 없는 것).new는 실제로 런타임에 존재합니다(예:Date그렇긴 하지만JQueryStatic(아닌가?만약 그렇지 않다면, 당신은 확실히interface
  • 다른 TypeScript 파일에서 컴파일된 클래스를 다루고 있습니까?아니면 충분히 유사한 클래스를 취급하고 있습니까?사용 가능한 경우 사용declare class

인터페이스는 다음과 같이 실장할 수 있습니다.

class MyClass implements Example {
    Method() {

    }
}

★★★★★★★★★★ ★declare class구문은 실제로 TypeScript에 기술되지 않은 외부 코드의 유형 정의를 추가하기 위해 사용됩니다.따라서 구현은 "elsewhere"입니다.

declare요..ts/d.ts「가 「」의 키워드를 가 있다고 입니다.declaring현재 파일에 정의되어 있지 않은 경우에도 해당 환경에 존재할 수 있습니다.그러면 선언된 개체를 사용할 때 Typescript 컴파일러가 다른 컴포넌트가 변수를 제공할 수 있음을 인식하기 때문에 이 기능을 통해 유형 안전성을 확보할 수 있습니다.

★★★의 차이declare ★★★★★★★★★★★★★★★★★」interfaceTS:

선언:

declare class Example {
    public Method(): void; 
}

코드 기기 in in in in in indeclare TS가 에 .Example 해서을 포함하는 .이것은 수업이 마법처럼 포함된다는 것을 의미하지 않는다.때할 수 있도록 할 할 때).declare키워드를 지정합니다.

인터페이스:

interface Example {
    Method(): void;
}

interface는 타이프 스크립트 내에만 존재하는 가상 구성체입니다.타이프스크립트 컴파일러는 타입 체크만을 목적으로 사용합니다.자바스크립트타이프스크립트 컴파일러는 오브젝트가 올바른 구조를 가지고 있는지 확인하기 위해 인터페이스를 사용합니다.

예를 들어 다음과 같은 인터페이스가 있는 경우:

interface test {
  foo: number,
  bar: string,
}

이 인터페이스 타입을 가지는 정의 대상 오브젝트는, 인터페이스와 완전하게 일치할 필요가 있습니다.

// perfect match has all the properties with the right types, TS compiler will not complain.
  const obj1: test = {   
    foo: 5,
    bar: 'hey',
  }

언급URL : https://stackoverflow.com/questions/14345485/whats-the-difference-between-declare-class-and-interface-in-typescript

반응형