문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판이전 판다음 판 | 이전 판 | ||
| typescript:function [2019/07/27 16:03] – [this parameters] taekgu | typescript:function [2025/04/15 10:05] (현재) – 바깥 편집 127.0.0.1 | ||
|---|---|---|---|
| 줄 67: | 줄 67: | ||
| let myAdd = function(x: number, y: number): number { return x + y; }; | let myAdd = function(x: number, y: number): number { return x + y; }; | ||
| - | // The parameters ' | + | // The parameters ' |
| let myAdd: (baseValue: number, increment: number) => number = | let myAdd: (baseValue: number, increment: number) => number = | ||
| function(x, y) { return x + y; }; | function(x, y) { return x + y; }; | ||
| 줄 258: | 줄 258: | ||
| ==== this parameters in callbacks ==== | ==== this parameters in callbacks ==== | ||
| 나중에 콜백 할 라이브러리에 함수를 전달할 때 콜백에서 '' | 나중에 콜백 할 라이브러리에 함수를 전달할 때 콜백에서 '' | ||
| + | |||
| + | <code javascript> | ||
| + | interface UIElement { | ||
| + | addClickListener(onclick: | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | '' | ||
| + | |||
| + | <code javascript> | ||
| + | class Handler { | ||
| + | info: string; | ||
| + | onClickBad(this: | ||
| + | // oops, used `this` here. using this callback would crash at runtime | ||
| + | this.info = e.message; | ||
| + | } | ||
| + | } | ||
| + | let h = new Handler(); | ||
| + | uiElement.addClickListener(h.onClickBad); | ||
| + | </ | ||
| + | |||
| + | '' | ||
| + | |||
| + | <code javascript> | ||
| + | class Handler { | ||
| + | info: string; | ||
| + | onClickGood(this: | ||
| + | // can't use `this` here because it's of type void! | ||
| + | console.log(' | ||
| + | } | ||
| + | } | ||
| + | let h = new Handler(); | ||
| + | uiElement.addClickListener(h.onClickGood); | ||
| + | </ | ||
| + | onClickGood는이 유형을 this: void로 지정하기 때문에 addClickListener에 전달할 수 있습니다. 물론 이것은 this.info를 사용할 수 없다는 것을 의미합니다. 둘 다 원한다면 화살표 함수를 사용해야합니다. | ||
| + | <code javascript> | ||
| + | class Handler { | ||
| + | info: string; | ||
| + | onClickGood = (e: Event) => { this.info = e.message } | ||
| + | } | ||
| + | </ | ||
| + | 이것은 화살표 함수가 this를 사용하기 때문에 작동합니다. 그래서 당신은 항상 이것을 기대하는 무언가에 전달할 수 있습니다 this: void. 단점은 처리기 유형의 객체 당 하나의 화살표 함수가 작성된다는 것입니다. 한편, 메소드는 한 번만 작성되어 Handler의 프로토 타입에 첨부됩니다. 핸들러 유형의 모든 객체간에 공유됩니다. | ||
| + | |||
| + | ===== Overloads ===== | ||
| + | <code javascript> | ||
| + | let suits = [" | ||
| + | |||
| + | function pickCard(x: {suit: string; card: number; }[]): number; | ||
| + | function pickCard(x: number): {suit: string; card: number; }; | ||
| + | function pickCard(x): | ||
| + | // Check to see if we're working with an object/ | ||
| + | // if so, they gave us the deck and we'll pick the card | ||
| + | if (typeof x == " | ||
| + | let pickedCard = Math.floor(Math.random() * x.length); | ||
| + | return pickedCard; | ||
| + | } | ||
| + | // Otherwise just let them pick the card | ||
| + | else if (typeof x == " | ||
| + | let pickedSuit = Math.floor(x / 13); | ||
| + | return { suit: suits[pickedSuit], | ||
| + | } | ||
| + | } | ||
| + | |||
| + | let myDeck = [{ suit: " | ||
| + | let pickedCard1 = myDeck[pickCard(myDeck)]; | ||
| + | alert(" | ||
| + | |||
| + | let pickedCard2 = pickCard(15); | ||
| + | alert(" | ||
| + | </ | ||
| + | 컴파일러가 올바른 유형 검사를 선택하기 위해 기본 JavaScript와 비슷한 과정을 거칩니다. 오버로드 목록을보고 첫 번째 오버로드로 진행하여 제공된 매개 변수를 사용하여 함수를 호출합니다. 일치하는 것을 찾으면, | ||
| + | |||
| + | pickCard(x) 함수는 모든 객체가 오버로드리스트의 일부가 아니므로 객체를 취하는 오버로드와 숫자를 취하는 오버로드의 두 가지 오버로드 만 있습니다. 다른 매개 변수 유형으로 pickCard를 호출하면 오류가 발생합니다. | ||
| + | |||
| + | ==== 예제 ==== | ||
| + | <code javascript> | ||
| + | function add(a: string, b: string): string; | ||
| + | function add(a: number, b: number): string; | ||
| + | function add(a, b): any { | ||
| + | return a + b; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | 함수명과 매개변수의 개수는 같지만 타입을 다른 경우. | ||
| + | 다른 언어의 오버로드는 함수명만 동일하면 되지만 TypeScript의 오버로딩은 함수명과 매개변수의 갯수가 같아야 한다. | ||