Skip to content

Commit 13205c6

Browse files
Merge pull request #74 from yahma25/Translation-to-ko-playground-Typing-Functions
Translate 1 file to ko - Typing Functions
2 parents 7806361 + 215c3d3 commit 13205c6

File tree

1 file changed

+136
-0
lines changed

1 file changed

+136
-0
lines changed
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
// TypeScript의 추론으로 제공되는 정보로도 충분합니다만,
2+
// 함수의 형태를 문서화하는
3+
// 다양한 방법을 제공하는 많은 방식이 있습니다.
4+
5+
// 우선 좋은 위치는 선택적 매개변수를 살펴보는 것입니다.
6+
// 이는 매개변수를 생략할 수 있다는 것을 알려주는 방법입니다.
7+
8+
let i = 0;
9+
const incrementIndex = (value?: number) => {
10+
i += value === undefined ? 1 : value;
11+
};
12+
13+
// 이 함수는 다음과 같이 호출할 수 있습니다:
14+
15+
incrementIndex();
16+
incrementIndex(0);
17+
incrementIndex(3);
18+
19+
// 함수를 작성할 때 타입 추론을 제공하는
20+
// 함수 매개변수를 입력할 수 있습니다.
21+
22+
const callbackWithIndex = (callback: (i: number) => void) => {
23+
callback(i);
24+
};
25+
26+
// 함수 인터페이스를 임베딩하면
27+
// 화살표 때문에 읽기 어려울 수 있습니다.
28+
// 타입 별칭을 사용하여 함수 매개변수에 이름을 지정하게 합니다.
29+
30+
type NumberCallback = (i: number) => void;
31+
const callbackWithIndex2 = (callback: NumberCallback) => {
32+
callback(i);
33+
};
34+
35+
// 다음과 같이 호출할 수 있습니다:
36+
37+
callbackWithIndex(index => {
38+
console.log(index);
39+
});
40+
41+
// 위에 있는 index에 호버하면
42+
// TypeScript가 index를 숫자로 정확히 추론한 것을 확인해볼 수 있습니다.
43+
44+
// 인스턴스 참조로 함수를 전달할 때도, TypeScript 추론은 동작합니다.
45+
// 확인하기 위해,
46+
// number를 string으로 변경했던 함수를 사용합니다:
47+
48+
const numberToString = (n: number) => {
49+
return n.toString();
50+
};
51+
52+
// 모든 number를 string으로 변환하기 위하여
53+
// 배열에 map과 같은 함수에서 사용할 수 있으며,
54+
// 아래에 있는 stringedNumbers에 호버해보면 예상된 타입을 확인할 수 있습니다.
55+
const stringedNumbers = [1, 4, 6, 10].map(i => numberToString(i));
56+
57+
// 코드를 간소화하여, 직접 함수를 전달할 수 있고
58+
// 더 집중된 코드로 동일한 결과를 얻을 수 있습니다:
59+
const stringedNumbersTerse = [1, 4, 6, 10].map(numberToString);
60+
61+
// 많은 타입을 수용하는 함수가 있을 수도 있지만,
62+
// 몇 개의 프로퍼티에만 관심이 있을 것입니다.
63+
// 이것은 타입에서 색인 된 시그니처에 대한 유용한 사례입니다.
64+
// 다음 타입은 이 함수가 프로퍼티 이름이 포함되어 있다면
65+
// 어떠한 객체도 사용해도 괜찮다고 선언합니다:
66+
67+
interface AnyObjectButMustHaveName {
68+
name: string;
69+
[key: string]: any;
70+
}
71+
72+
const printFormattedName = (input: AnyObjectButMustHaveName) => {};
73+
74+
printFormattedName({ name: "joey" });
75+
printFormattedName({ name: "joey", age: 23 });
76+
77+
// index-signatures에 관해 더 배우고 싶다면
78+
// 다음 내용을 권장합니다:
79+
//
80+
// https://www.typescriptlang.org/docs/handbook/interfaces.html#excess-property-checks
81+
// https://basarat.gitbooks.io/typescript/docs/types/index-signatures.html
82+
83+
// tsconfig flag인 suppressExcessPropertyErrors를 통해
84+
// 모든 곳에서 이런 종류의 동작을 또한 허용할 수 있다고
85+
// 하지만, 여러분의 API를 사용하는 다른 사람이
86+
// 이 설정을 해제했는지는 알 수 없습니다.
87+
88+
// JavaScript에 있는 함수는 다른 매개변수 모음을 허용합니다.
89+
// 설명을 위한 두 가지 공통 패턴이 있습니다:
90+
// 매개변수 또는 반환에 대한 유니언 타입과 함수 오버로드.
91+
92+
// 매개변수에 유니언 타입을 사용하는 것은
93+
// 한 개 또는 두 개의 변경 점만 있고,
94+
// 함수 간에 문서 변경이 필요하지 않는 경우에 의미 있습니다.
95+
96+
const boolOrNumberFunction = (input: boolean | number) => {};
97+
98+
boolOrNumberFunction(true);
99+
boolOrNumberFunction(23);
100+
101+
// 반면에 함수 오버로드는 매개변수와 반환 타입에 대한
102+
// 더 다양한 구문을 제공합니다.
103+
104+
interface BoolOrNumberOrStringFunction {
105+
/** bool 타입을 갖고, bool 타입을 반환 */
106+
(input: boolean): boolean;
107+
/** number 타입을 갖고, number 타입을 반환 */
108+
(input: number): number;
109+
/** string 타입을 갖고, bool 타입을 반환 */
110+
(input: string): boolean;
111+
}
112+
113+
// 처음 보는 선언이라면,
114+
// TypeScript에 이 파일의 런타임에서는 존재하지 않더라도
115+
// 무언가 존재한다고 알려줍니다.
116+
// 부작용과 함께 매핑된 코드는 유용하지만,
117+
// 많은 코드가 있는 구현을 만드는 데모에 매우 유용합니다.
118+
119+
declare const boolOrNumberOrStringFunction: BoolOrNumberOrStringFunction;
120+
121+
const boolValue = boolOrNumberOrStringFunction(true);
122+
const numberValue = boolOrNumberOrStringFunction(12);
123+
const boolValue2 = boolOrNumberOrStringFunction("string");
124+
125+
// 위 값과 함수에 호버해보면
126+
// 올바른 문서와 반환 값을 확인할 수 있습니다.
127+
128+
// 함수 오버로드를 사용하는 것으로도 충분합니다만,
129+
// 입력과 반환 값의 다른 타입을 다루기 위한 다른 도구가 있으며
130+
// 이는 제네릭입니다.
131+
132+
// 타입 정의에서 placeholder 변수로
133+
// 타입을 가지는 방법을 제공합니다.
134+
135+
// example:generic-functions
136+
// example:function-chaining

0 commit comments

Comments
 (0)