2014-01-12 4 views
0

TypeScript에서 작은 응용 프로그램을 사용하고 있습니다. 그것은 다음과 선언, show라는 방법이있는 컨텍스트 메뉴에 대한 모듈이 있습니다TypeScript의 나머지 매개 변수 이해 0.9.5

export var show = function (position: { top: number; left: number; }, 
    optionList: { [name: string]: (...params: any[]) => any }) 

을 그래서 기본적으로 내가 어떤 위치에 메뉴를 표시 및 기능에 문자열을 매핑하는 객체를 전달하려는 -이는 것 내 메뉴의 항목 및 할당 된 콜백 그 콜백이 어떤 타입의 인자라도 받아들이기를 원합니다 - 그리고 이것은 제가 여기서 사용한 나머지 파라미터를 이해하는 방법입니다. 그러나, 나는이처럼 내 함수를 호출하려고 :

menu.show(
    { 
     top: nativeEvent.clientY, 
     left: nativeEvent.clientX + 5 
    }, 
    { 
     "Add elem...": (e: JQueryEventObject) => { } 
    }); 

나는 오류가 말을 얻을 Call signatures of types '(e: JQueryEventObject) => void' and '(...params: any[]) => any' are incompatible 그와 Call signature expects 0 or fewer parameters.

사람이 여기에 무슨 일이 일어나고 있는지 말해 줄 수 있을까요? 왜냐하면 나는 휴식 매개 변수의 개념을 완전히 이해하지 못하는 것으로 밝혀졌습니다. 컴파일러가 함수가 0 개의 매개 변수를 필요로한다고 알려주는 이유와 매개 변수의 양을 예상하도록 만드는 방법은 무엇입니까?

답변

1

나머지 매개 변수는 모든 멤버를 의미하므로 선택적으로 전달하는 함수의 모든 멤버는 선택 사항으로 (e?: JQueryEventObject) => { }이어야합니다. :

var show = function (position: { top: number; left: number; }, 
    optionList: { [name: string]: (...params: any[]) => any }){} 

show(
    { 
     top: 1, 
     left: 5 
    }, 
    { 
     "Add elem...": (e?: any) => { } // Notice e is optional 
    });  
+1

오른쪽. 나는 스펙을 보았고 어떻게 든 그것을 놓쳤다. "호출 또는 구문 서명을 비교할 때 매개 변수 이름은 무시되며 나머지 매개 변수는 나머지 매개 변수 요소 유형의 선택적 매개 변수를 무제한 확장하는 것과 일치합니다." 감사합니다. –