programing

유형 스크립트 인터페이스, 함수 및 네임스페이스의 이름이 모두 동일합니다.어떤 것이 수출되고 있습니까?

newstyles 2023. 6. 28. 21:25

유형 스크립트 인터페이스, 함수 및 네임스페이스의 이름이 모두 동일합니다.어떤 것이 수출되고 있습니까?

Typescript 정의 파일(확실히)Typed) 검사 중입니다. 인터페이스, 함수 및 네임스페이스가 모두 동일합니다.twilio.

다음은 파일의 처음 몇 줄에 있는 샘플입니다.

declare interface twilio {
  (sid?: string, tkn?: string, options?: twilio.ClientOptions): twilio.RestClient
}

declare function twilio(sid?: string, tkn?: string, options?: twilio.ClientOptions): twilio.RestClient;

declare namespace twilio {
 ....

그리고 파일 하단에 있는 모든 부분에

export = twilio;

어떤 것을 수출하고 있습니까?인터페이스?기능?네임스페이스?이게 어떻게 말이 됩니까?어떻게 동일한 범위/이름 공간에서 여러 항목의 이름을 동일한 이름으로 지정할 수 있습니까?

@ppp 응답 확장

선언 병합은 TypeScript 컴파일러가 동일한 이름을 가진 두 개 이상의 유형을 하나의 선언으로 병합하는 경우입니다.

기억해야 할 중요한 것은 클래스가 있는 클래스는 병합할 수 없다는 것입니다.

예를 들어 병합이 허용됩니다.

interface User {
  name: string;
}

interface User {
  age: number;
}

interface User {
  height: number;
}

class Person implements User {
  name = "John"
  age = 30;
  height = 180
}

enum User {...}

namespace User {...}

const person = new Person();
console.log(person) // {name: "John", age: 30, height: 180}

export person;

따라서 당신의 질문에 대답하기 위해 위의 예와 같이 단일 유형을 내보낼 수 있습니다. 선언의 나머지 부분이 그들 사이에 병합됩니다.

기본적으로, 그것은 위의 모든 것을 동시에 정의합니다.는 당신에게 운동장 링크를 주기 위해 새로운 답변을 추가하고 그것이 당신에게 도움이 되기를 바랍니다.

공식 원고 문서에서는 이를 "합병 선언"이라고 부릅니다.

그들은 방금 달리기 스포츠 가방 같은 것을 만들었습니다.괜찮아요, 당신 코드가 아니에요.기본적으로 그들은 위의 모든 것을 수출합니다.자바스크립트로 할 수 있는 것처럼:

function foo() {};
foo.bar = function() {};

놀이터 코드를 보세요.

언급URL : https://stackoverflow.com/questions/48314571/typescript-interface-function-and-namespace-all-have-the-same-name-which-is-be