2014-01-16 2 views
7

제 생각에이 질문에 대한 대답은 "아니오"이지만 제가 놓친 뭔가가 있는지 확인하고 싶었습니다.TypeScript를 사용하여 jQuery.fn.extend를 모델링 할 수 있습니까?

jQuery에는 fn.extend method이있어 추가 방법으로 jQuery 객체를 보강 할 수 있습니다.

jQuery.fn.extend({ 
    check: function() { 
    return this.each(function() { 
     this.checked = true; 
    }); 
    }, 
    uncheck: function() { 
    return this.each(function() { 
     this.checked = false; 
    }); 
    } 
}); 

// Use the newly created .check() method 
$("input[type='checkbox']").check(); 

나는 DefinitelyTyped 프로젝트의의 jQuery JSDoc 및 테스트를 작성했습니다 다음은 API 문서에서 예입니다. 이전 jQuery.fn은 any으로 정의되었습니다. extend 방법을 다루 내가 그것을 변화에서 찾고 한 문서와 일치를 가져 오려면 : 그러나

fn: { 
    /** 
    * Merge the contents of an object onto the jQuery prototype to provide new jQuery instance methods. 
    * 
    * @param object An object to merge onto the jQuery prototype. 
    */ 
    extend(object: any): any; 
} 

을, 나는 동적 모델보다는 하는 타이프의 방법이 생각하지 않습니다 static 메소드의 보강. any 또는

  • 사용 브래킷 표기법
  • $("input[type='checkbox']")["check"](); 같은 내 질문에

    1. 캐스트 jQuery를 : 이후 귀하의 TS에서 당신 않는 한을 하나 이러한 동적으로 증강 방법을 사용하지 않을 수 있습니다 의미합니다 거기 내가 놓친 것? 모델 jQuery.fn을 더 잘 모델링 할 수 있도록 TypeScript에서 jQueryStatic에 이러한 동적 메서드가 할당 되었습니까? 내가 말했듯이, 대답은 "아니오"라고 생각하지만 확신하고 싶었습니다.

    답변

    3

    컴파일러에서 정의 내에서 코드를 실행하는 것이 좋지만 그러한 구문은 존재하지 않습니다.

    
    interface Foo{ 
        bar(member:any):any @ execute { // execute this code inside the compiler language service: 
         var keys = compiler.getArgs().keys(); 
         compiler.getIdentifier('JQueryStatic').addMembers /// you get the point. 
        } 
    } 
    

    를하지만 컴파일 속도가 느린 만드는 잠재력을 가지고, 나는 추정 테이블에없는 그것의 더 많은 일을 말할 것도없고, 가장자리의 경우 전체 될 것이다 : 이것은 내가이 있었으면 좋겠다 것입니다.

    +0

    저기서 건배. 그것은 내가 예상했던 것만 큼 가치가 있었지만 나는 생각할 가치가 있었다. –

    +0

    관련 기능 요청'계약 프로그래밍 ': https://typescript.codeplex.com/workitem/700 – basarat

    +0

    감사의 말 - 지금 투표했습니다! –

    관련 문제