2016-08-12 2 views
1

모듈은 여기에 있습니다 :NPM 모듈의 주변 네임 스페이스를 어떻게 선언합니까?

declare namespace Slick { 
    export class Grid {...} 
    namespace Data { 
    export class DataView {...} 
    } 
} 
:
namespace Slick { 
    class Grid {...} 
    namespace Data { 
    class DataView {...} 
    } 
} 

그래서 내가 포함의 REPO의 루트에 파일 typings.d.ts을 만들어 : https://github.com/coatue/SlickGrid

이 ambiently 다음과 같은 구조를 수출

그리고 repo의 package.json에 "typings": "./typings.d.ts"을 넣었습니다.

그러나 이것은 효과가없는 것 같습니다.

명시 적으로 import Slick from "slickgrid2" 없이도 소비 프로젝트의 모든 파일에서 Slick.GridSlick.Data.DataView을 사용할 수 있습니다. 여기에 사용할 올바른 구문은 무엇입니까? Typescript 핸드북/문서는이 사례를 다루지 않습니다.

답변

2

모듈을 가져 오지 않으면 TypeScript에서 타이핑을로드하지 않습니다. Typings for NPM Packages을 참조하십시오. 그 소식통은 또한 이 네임 스페이스 (또는 "내부 모듈") 대신 "외부 모듈"을 사용해야한다고 말합니다. 이것이 여기서하고있는 일입니다.

가져 오기를 수행하지 않고도 "소비 프로젝트의 모든 파일에서 사용할 수 있도록"유형 정의를 요청하는 것은 내가 아는 한 불가능합니다. 최소한 triple-slash reference directive을 추가해야합니다. 예 : /// <reference path="path/to/typings.d.ts"/>.

첫째, 당신은 그들이 필요할 때마다 직접 입력을 참조하도록 사용자에게 말할 수 있습니다 : 당신이 해결 옵션 몇 가지를 생각 /// <reference path="path/to/node_modules/slickgrid2/typings.d.ts" />

둘째, DefinitelyTyped 및 typings을 활용할 수 :

  1. 타이핑을 DefinitelyTyped에 게시하십시오.
  2. 사용자는 프로젝트에서 typings install --source dt --global을 사용하여 입력을 설치할 수 있습니다.

typings 폴더는 node_modules의 피어로 제공됩니다. 여기에는 index.d.ts이 포함됩니다. 이 도구는 입력 파일에 대한 참조를 자동으로 추가합니다. 이제 사용자는 유형 정의가 필요한 모든 파일의 상단에 /// <reference path="typings/index.d.ts" />을 넣을 수 있습니다. 어쨌든 다른 유형의 파일을 포함했을 수도 있습니다.

+0

감사! 나는 TS 팀이 이것을 강요하기를 원하는 이유를 알아 냈다. (또한, 로딩 타이핑은 동일한 라이브러리의 서로 다른 버전에서 잠재적으로 상충되는 항목을 가져 와서 전역 범위를 오염 시켜서는 안된다.)하지만 실제 모듈에서는 꽤 제한적으로 보인다. – bcherny

관련 문제