Typescript에서 선언 병합이란 무엇입니까?
TypeScript에서 선언 병합이란 무엇입니까?
설명:
TypeScript에서 값, 유형 및 네임스페이스는 하나의 형식으로 서로 쌓일 수 있습니다.
단일 엔티티이며 단일 식별자로 내보냅니다.
선언 유형
네임스페이스
유형
값
네임스페이스
엑스
엑스
유형 별칭
엑스
상호 작용
엑스
수업
엑스
엑스
열거형
엑스
엑스
기능
엑스
변하기 쉬운
엑스
인터페이스 병합
인터페이스는 typescript에서 가장 일반적인 선언 병합 유형이며, 선언된 인터페이스 유형의 멤버는 단일 인터페이스로 병합되고 단일 식별자가 할당됩니다.
interface User{
id: number;
name: string;
job: string;
salary: string;
}
interface User {
gender: string;
isMarried: boolean;
}
const user: User = {
id: 3,
name: "Abdul Shakur",
job: "software developer",
salary: $4000,
gender: "male",
isMarried: true
}
참고: 병합 시 마지막 인터페이스가 항상 가장 높은 우선 순위를 갖습니다.
interface Document {
createElement(tagName: any): Element;
}
interface Document {
createElement(tagName: "div"): HTMLDivElement;
createElement(tagName: "span"): HTMLSpanElement;
}
interface Document {
createElement(tagName: string): HTMLElement;
createElement(tagName: "canvas"): HTMLCanvasElement;
}
Document
의 병합된 선언은 다음과 같습니다.interface Document {
createElement(tagName: "canvas"): HTMLCanvasElement;
createElement(tagName: "div"): HTMLDivElement;
createElement(tagName: "span"): HTMLSpanElement;
createElement(tagName: string): HTMLElement;
createElement(tagName: any): Element;
}
네임스페이스 병합
이름이 같은 네임스페이스는 구성원을 병합하고 단일 엔터티로 내보냅니다. 네임스페이스가 네임스페이스와 값을 생성한다는 것을 이해해야 합니다.
namespaces
를 병합하기 위해 각 네임스페이스에서 선언된 유형 정의 내보낸 인터페이스가 자체적으로 병합되어 병합된 유형 정의가 포함된 단일 네임스페이스를 형성합니다.이름이 같은 네임스페이스가 이미 존재하면
namespace
value,
를 병합하기 위해 typescript는 기존 네임스페이스를 유지하고 동일한 이름을 가진 후속 네임스페이스의 구성원을 첫 번째 네임스페이스에 추가하여 확장합니다.코드 예:
namespace UsersDB{
export class AdminUser {}
}
namespace UsersDB {
// un-exported type declaration
interface Staff {
staffID: number;
name: string;
role: string[];
salary?: string;
department: string;
}
// exported type declaratio
export interface User {
id: number;
name: string;
job: string;
salary: string;
}
// exported type declaration
export class ClientUser{}
}
위의 코드 스니펫이 병합되면 아래 코드가 결과가 됩니다.
namespace UsersDB {
export interface User {
id: number;
name: string;
job: string;
salary: string;
}
export class AdminUser {}
export class ClientUser {}
}
네임스페이스를 클래스와 병합
TS Compiler는 이름이 같은 클래스와 네임스페이스의 구성원을 병합합니다. 멤버는 병합된 형식 선언에서 인식되도록 다른 형식으로 내보내야 합니다.
class ClientsDB {
client!: ClientsDB.ClientName;
}
namespace ClientsDB {
export class ClientName{
}
}
Merging Namespaces with function
다음과 같이 "스택"되는 함수 및 네임스페이스를 정의할 수 있습니다.
$
동시에 직접 호출할 수 있으며 다음과 같은 것에 대한 네임스페이스 역할을 할 수 있습니다.$.ajax
, $.getJSON
등…function $(selector: string): NodeListOf<Element> {
return document.querySelectorAll(selector)
}
namespace $ {
export function ajax(arg: {
url: string
data: any
success: (response: any) => void
}): Promise<any> {
return Promise.resolve()
}
}
Reference
이 문제에 관하여(Typescript에서 선언 병합이란 무엇입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/shakvilla/what-is-declaration-merging-in-typescript-1o9p텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)