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
★★★★★★★★★★★★★★★★★」interface
TS:
선언:
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
'programing' 카테고리의 다른 글
유형 스크립트의 트리거 클릭 - 유형 'Element'에 속성 'click'이 없습니다. (0) | 2023.02.13 |
---|---|
React fragment에 주요 소품을 추가할 수 있습니까? (0) | 2023.02.13 |
MBean [HikariDataSource(HikariPool-0)]을(를) 키 '데이터소스'에 등록할 수 없습니다. (0) | 2023.02.13 |
문자열을 JSON 개체로 변환 (0) | 2023.02.09 |
전체 경로 제거, 파일 이름만 유지 (0) | 2023.02.09 |