우리는 개인 NPM 환경에 게시하는 TypeScript 라이브러리가 있으며이 라이브러리를 다른 TS, ES6 또는 ES5 프로젝트에서 사용하려고합니다.TypeScript 기본 상수 내보내기
라이브러리가 foo
를라는 NPM 패키지하자가 주요 파일을 수행 배럴로 작동 다음
// Index.ts
import Foo from './Core/Foo';
export {default as Foo} from './Core/Foo';
const foo = new Foo();
export default foo;
우리는 중앙 도서관 클래스뿐만 아니라 애플 리케이션을 사용하기위한 기본 인스턴스를 내보낼 필요하지 않으면 새로운 것을 만들지 않아도됩니다.
또한, 우리는 DefinitelyTyped에 비슷한 방식으로 별도의 저장소의 유형 정의 파일을 생성 : 그것은이다에 대한 error TS1063: An export assignment cannot be used in a namespace.
내가 목표로하고있어 어떤 실패에 대한
// foo.d.ts
declare namespace Foo {
export class Foo {
public constructor()
// ...methods
}
const foo: Foo;
export default foo;
}
declare module 'foo' {
export = Foo;
}
이 테스트를 실행 다음과 같은 기본 인스턴스를 사용하십시오.
// ES5, browser env
window.Foo.foo.someMethod();
// ES6/TS
import foo from 'foo';
foo.someMethod();
올바른 방법이 있다면 어떤 아이디어가 있습니까?
@ 다니엘 - rosenwasser처럼 모듈을 선언 편집
전에 일을 제안했다,하지만 우리는 첫 번째 확장 새 모듈을 만들려고 할 때 문제가 발생했습니다.
// bar.d.ts
/// <reference path="../foo/foo.d.ts"/>
import {
Foo
} from 'foo';
declare module 'bar' {
export class Bar extends Foo {
public constructor();
// more methods
}
}
그리고 그 테스트 : 예를 들어
여기
bar/bar-tests.ts: error TS2307: Cannot find module 'bar'.
bar/bar.d.ts: error TS2664: Invalid module name in augmentation, module 'bar' cannot be found.
예, 이것은 내가 전에 가지고,하지만 난을 만들려고 할 때 문제가 나중에 와서 무엇을 꽤 많이있다 이 모듈을 확장 한 새로운 모듈은 질문에 샘플을 추가 할 것이다 ... – RecuencoJones
다른 모듈에서'declare module "foo"{} "구문은 * module augmentation *을 만든다. 다른 모듈에있는 * 이유 *는 최상위 가져 오기가 있다는 것입니다. import *를'declare module' "bar"'로 옮겨서 제대로 작동하게 할 수 있습니다. –
이것이 효과가 있습니다! import 문이 모듈 선언 안에 있어야한다는 것을 알지 못했습니다. Daniel에게 감사드립니다! – RecuencoJones