2013-08-21 2 views
4

다양한 종류의 클래스에 대해 들어 봤지만 Ambient 클래스는 무엇을하고 정확히 무엇입니까? 다른 클래스와 다른 점은 무엇입니까?언어에 구애받지 않는 문맥과 타이프 스크립트에서 앰비언트 클래스 란 무엇입니까?

타이프 스크립트 (typicript)에 관한 몇 개의 비디오를 보면서이 사실을 알게되었고, 그들은 항상 앰비언트 클래스에 대해 이야기하고 있습니다.하지만 그들은 보통의 오래된 클래스를 정의하려고합니다. 변수 및 함수가 포함되어 있습니다.

그래서 어떤 사람이 할 수 있다면 앰비언스 클래스가 언어 불가지론 컨텍스트에 무엇인지 정의하고 타이프 스크립트에서 무엇을 의미합니까?

답변

12

앰비언트 선언은 기존 코드에 대한 유형 정보를 제공하는 데 사용됩니다. 예를 들어

, 당신은 타이프에서 다음을 쓴 경우 :

module Example { 
    export class Test { 
     do() { 
      return 'Go'; 
     } 
    } 
} 

var test = new Example. 

당신은 당신을 돕기 위해 . 후 자동 완성 기능을 얻을 것이라고는 Test 클래스를 발견 할 수 있습니다.

일부 TypeScript 코드에서 사용하고있는 자바 스크립트가 이미있는 경우이 자동 완성 기능을 사용할 수 없으며 입력 부분에서 유형을 인식하지 못합니다. TypeScript에서 전체 JavaScript 파일을 다시 쓰는 대신 대신에 앰비언트 선언을 작성할 수 있습니다.

예를 들어, 다음 자바 스크립트 파일이 훨씬 더 큰 것을 상상 타이프에서 쓰기 다시하는 데 시간이 오래 걸릴 것 :

var Example; 
(function (Example) { 
    var Test = (function() { 
     function Test() { 
     } 
     Test.prototype.do = function() { 
      return 'Go'; 
     }; 
     return Test; 
    })(); 
    Example.Test = Test; 
})(Example || (Example = {})); 

주변 선언의 형식 정보를 포함,하지만하지 구현 :

declare module Example { 
    export class Test { 
     do() : string; 
    } 
} 

이렇게하면 TypeScript에서 모든 것을 다시 쓰지 않아도 JavaScript에 대한 전체 유형 검사 및 자동 완성이 제공됩니다.

언제 이렇게할까요? 대개 타사 JavaScript를 많이 사용할 때 앰비언트 선언을 작성합니다. 라이브러리를 업데이트 할 때마다 TypeScript에서 다시 작성할 수 없기 때문에 앰비언스 선언을 사용하면 영향을 최소화하면서 업데이트를 수행 할 수 있습니다 새로운 기능을 추가해야 할 수도 있지만 구현 세부 사항으로 인해 변경할 필요는 없습니다. 앰비언트 선언은 제 3 자 라이브러리가 수행하는 작업을 설명하는 계약의 역할을합니다.

자세한 내용은 내 guide to writing ambient declarations을 참조하십시오. existing ambient declarations for popular JavaScript libraries on Definitely Typed을 많이 볼 수 있습니다.

+0

또한 몇 가지 일반적인 DefinitelyTyped가 가지고있는 문제를 해결하기 위해 시도하는 프로젝트 "typings"확인하시기 바랍니다 : 또한 읽을 https://github.com/typings/typings 을 "왜의 관리자들 중 하나의 explaing 입력 : "프로젝트 : https://github.com/typings/typings/issues/72 –

관련 문제