Functions
JavaScript에서 함수를 선언하는 방식에는
여러 가지가 있습니다. 두 숫자를 더하는
함수를 한번 살펴보겠습니다:
전역 스코프에 addOldSchool라는 이름으로 함수를 생성합니다
// 또한 함수의 이름을 변수로
옮길 수 있습니다
function addOldSchool(x, y) {
return x + y;
}
// 우리는 마지막 방식에 초점을 맞추겠습니다.
하지만 세 가지 방식에 똑같이 적용됩니다.
TypeScript는 함수 정의에
추가 구문을 제공하고 해당 함수에서
예상되는 타입에 대한 힌트를 제공합니다.
다음은 add 함수의 가장 열려있는 버전으로,
add 함수는 any 타입의 두 개의 입력을 받습니다: 이것은
문자열, 숫자 또는 객체가 될 수 있습니다.
const anonymousOldSchoolFunction = function (x, y) {
return x + y;
};
// 함수 선언에 화살표 함수 또한 사용할 수 있습니다
const addFunction = (x, y) => {
return x + y;
};
// JavaScript에서는 타당하지만 (예시와 같이 문자열도
더해질 수 있습니다) 우리가 의도한 숫자를 더하는
함수와는 맞지 않으므로, 우리는 x와 y를 숫자만
허용하게 변환합니다.
const add1 = (x: any, y: any) => {
return x + y;
};
add1("Hello", 23);
// 좋습니다. 이제 숫자 이외의 값이 전달되면 에러가
발생합니다. 만약 add2 단어 위로 마우스를 가져가면
TypeScript가 다음과 같이 설명하는 것을 볼 수 있습니다.
const add2: (x: number, y: number) => number
두 입력이 number일 때 가능한 반환 유형은 오로지
number라고 추론합니다. 훌륭합니다. 이것은 추가 구문을
작성할 필요가 없게 해줍니다.
이를 수행하는 데 필요한 사항을 살펴보겠습니다:
const add2 = (x: number, y: number) => {
return x + y;
};
add2(16, 23);
add2("Hello", 23);
// 이 함수는 에러를 발생시킵니다. 왜냐하면 TypeScript는
string 값이 반환되는 것으로 알고 있지만 함수는
그 약속을 지키지 못했기 때문입니다.
const add3 = (x: number, y: number): string => {
return x + y;
};
// 이것은 add2의 매우 명시적인 버전입니다
- 시작 하기 전에 자신에게 작업공간을 제공하기
위해 명시적인 반환 타입 구문을 사용하는 경우가
있습니다. 테스트 기반 개발에서 실패한 테스트로
시작하는 것이 권장되는 방식과 비슷하지만, 이 경우에는
대신 실패한 함수 형태가 있습니다.
이 예제는 입문서일 뿐입니다. 핸드북과 다음 예시의
Functional JavaScript 섹션 내에서 TypeScript의 함수가
어떻게 작동하는지에 대한 더 많은 것들을 배울 수 있습니다:
https://www.typescriptlang.org/docs/handbook/functions.html
example:function-chaining
그리고 JavaScript 필수 사항을 계속 살펴보기 위해,
코드 흐름이 TypeScript 유형에 어떤 영향을 미치는지 살펴보겠습니다:
example:code-flow
const add4 = (x: number, y: number): number => {
return x + y;
};