제 문제는 제 3 자 라이브러리에 TypeScript 형식 정의 .d.ts
을 추가 할 때 발생합니다. 이 라이브러리를 제어하지 않는다는 것을 명심하십시오, 단순히 그것을 소비하고 tsc 컴파일러를 진정 시키려고합니다. 여기에 가이드 라인을 읽기Typescript 형식 정의를 찾는 중입니다. 새로운 + 호출 가능 설명
다시 : 쓰기 d.ts
파일 :
https://typescript.codeplex.com/wikipage?title=Writing%20Definition%20%28.d.ts%29%20Files
나는이 특정한 예제를 찾고 있어요 : 새로운 + 호출 방법 다음
를 문서는 다음과 같은 패턴을 보여줍니다
interface Widget {
sprock(): void;
}
interface WidgetFactory {
new(name: string): Widget;
(width: number, height: number): Widget;
}
declare var widget: WidgetFactory;
나는 내 요구에 대해 다음 만들었습니다
declare module "react-localization" {
interface LocalizedStringsMethods {
setLanguage(language: string): void;
getLanguage(): string;
getInterfaceLanguage(): string;
formatString(str: string, ...values: any[]): string
getAvailableLanguages(): string[]
}
interface LocalizedStringsFactory {
new (props: any): LocalizedStringsMethods;
}
var LocalizedStrings: LocalizedStringsFactory;
export default LocalizedStrings;
}
여기서 주목할만한 예외는 문서 버전이 declare module
을 사용하지 않는 것입니다. 그 외에도, 내 눈에는 이것들이 동일해야하며 비슷한 결과를 가져야한다. 나는 분명히 뭔가를 놓치고있다. 대신 다음과 같은 오류가 발생합니다 :
오류 TS2351 : 유형이 통화 또는 구성 서명이없는 표현식에 'new'를 사용할 수 없습니다.
declare module "react-localization" {
var LocalizedStrings: any;
export = LocalizedStrings;
}
오류는 이제 사라,하지만 나는 모든 훌륭한 유형 정보를 잃게 :
나는이 내 정의를 변경할 수 있습니다. .? = (
나는 딱하다는 정확히 무슨 잘못 여기서 뭐하는 거지 신비에 추가하려면 확인
, 나는 export default
대신 풀러 타입의 예에서 export =
을하고 시도 :
declare module "react-localization" {
interface LocalizedStringsMethods {
setLanguage(language: string): void;
getLanguage(): string;
getInterfaceLanguage(): string;
formatString(str: string, ...values: any[]): string
getAvailableLanguages(): string[]
}
interface LocalizedStringsFactory {
new (props: any): LocalizedStringsMethods;
}
var LocalizedStrings: LocalizedStringsFactory;
export = LocalizedStrings; // <----- HERE instead of export default
}
?이
export default
이
undefined
를 반환 끝하지만 왜 작동
누군가가 나에게 설명 할 수 또한, 나는 가져올 수있는이 같은 :
import * as LocalizedStrings from 'react-localization'
내가로 가져 오기를 할 원합니다. 이 시점에서 전 (前者)과 함께 살 것이며, 나는 왜 그 이유를 알고 싶습니다.
추가적으로이 타사 라이브러리가 babel에서 컴파일 된 것으로 보입니다. https://github.com/Microsoft/TypeScript/issues/5565'Babel이 내보내기 만 내보내기 인 모듈을 이동시킬 때 기본값은 모듈을 주입하는 것입니다.수출 = 수출 [기본 "]; 생성 된 코드에 내 보낸 객체를 함수 자체가되게합니다 (기본 속성으로 함수가있는 모듈 객체 대신). –