2012-12-12 3 views
0

우리는 자바 스크립트 중 일부를 타이프 ​​스크립트로 변환하는 중입니다. 우리는 예를 들어, 우리는 우리가 유지되는 다른 자바 스크립트 라이브러리에 꺼내 한 기존의 일부 기능이 :다른 이름으로 모듈 확장하기

Framework.utils = { 
    utilFnOne: function()..., 
    utilFnTwo: function()..., 
    utilFnThree: function()..., 
} 

우리는 또한 다음과 같이 우리가 우리 비 프레임 워크 코드에서 사용하는 일부 유틸리티가 있습니다

Current.utils = Framework.utils; // Extend the framework's utils 
Current.utils.utilFnFour = function()...; 
Current.utils.utilFnFive = function()...; 

타이프 라이터

다음과 같이 우리는 프레임 워크 라이브러리에 대한 정의를 만들 수 있습니다

,555,

그리고 우리는 같은 것을 수행하여 Current.utils에 대한 타이프 정의를 만들 수 있습니다

module Current.utils { 
    export function utilFnFour() {} 
    export function utilFnFive() {} 
    export class StringUtils { } 
} 

우리는 같은 것을 할 수 있다면 그것은 좋은 것 :

module Current.utils extends Framework.utils { .... } 

그래서 인텔리는 것 우리가 할 때 프레임 워크와 현재의 회원들을 보여라.

Current.utils. 

편집 - 해상도

나는 라이언이 있다고 생각했다 및

약간 수정 Framework.d.ts

declare module Framework { 
    export var util: _utilImpl; 
    export class _utilImpl { 
     utilFnOne(a: string) : string; 
    } 
} 

Current.ts

module Current { 
    export var util = new _utilImpl(); 
    export class _utilImpl extends Framework._utilImpl { 
     utilFnTwo(b: number) : number; 
    } 
} 

답변

1

interface을 사용하여 조금 리팩터링 할 수 있습니다. module의 원하는 동작을 얻으려면 :

interface FrameworkUtils { 
    utilFnOne(s: string); 
    utilFnTwo(s: string); 
} 

declare module Framework { 
    export var utils: FrameworkUtils; 
} 

Framework.utils.utilFnOne(''); 

/// ... later 

interface CurrentUtils extends FrameworkUtils { 
    utilFnFour(); 
} 

declare module Current { 
    export var utils: CurrentUtils; 
} 

Current.utils.utilFnOne(''); 
Current.utils.utilFnFour(); 
관련 문제