함수에 전달되는 parameter에도 타입 애너테이션을 사용해서 타입을 선언할 수 있다.
파라미터에 타입을 선언하지 않으면 파라미터의 타입은 암시적으로 any
가 된다. 명확하게 파라미터의 타입을 선언하면 오류를 줄일 수 있다.
function sayHello(name: string) {
console.log(`Hello, ${name}.`);
}
function sayHello(name: string) {
console.log(`Hello, ${name}.`);
}
sayHello('Harry', 30); // ❌ Expected 1 arguments, but got 2.
sayHello(123); // ❌ Argument of type 'number' is not assignable to parameter of type 'string'.
function 함수(필수파라미터: string, 선택적파라미터?: string | undefined) {
// ...
}
undefined
값이 필요해서 의도적으로 사용할 경우) 파라미터 뒤에 ?
를 사용하여 선택적 매개변수임을 표시한다.undefined
타입이 유니언 타입에 포함되어 사용된다. 선택적파라미터?: 내가지정한타입 | undefined
=
를 사용해서 나타낸다.function 함수(파라미터1: string, 파라미터2 = 0) {
// ...
}
number
로 추론한다.추론된타입 | undefined
가 된다.function 함수(파라미터1: string, 파라미터2 = 0) {
// ...
}
함수('string', '123'); // ❌ 두 번째 인수의 타입은 number 또는 undefined이어야 한다.
function 함수(파라미터1: string, ...나머지파라미터: string[]) {
// ...
}
…
)를 사용한 나머지 매개변수는 함수 선언 시 가장 마지막 매개변수의 자리에서 사용[]
를 추가해서 표기function addTwoNumbers(number1: number, number2: number): number {
return number1 + number2;
}
=>
) 다음 함수의 본문이 나오지만, 함수 타입에서는 화살표 다음에 타입이 있다.let twoNumbers: (num1: number, num2: number) => number;
반복적으로 매개변수와 리턴 타입을 작성하지 않아도 된다 👍
type TwoNumbers = (num1: number, num2: number) => number;
let twoNumbers: TwoNumbers;
twoNumbers = (num1, num2) => num1.concat(num2); // ❌ Property 'concat' does not exist on type 'number'.
console.log
→ 아무것도 리턴하지 않는다.function 공허의지팡이(cost: number): void {
console.log(`공허의지팡이의 가격은 ${cost}골드 입니다.`);
}
void
반환 타입을 사용하면 함수에서 리턴되는 모든 값이 무시된다.void != undefined
무한 루프
일 경우 사용의도적인 에러
를 발생시킬 경우 사용void ≠ never
void
는 아무것도 반환하지 않는 함수에 사용하고,never
는 절대 반환하지 않는 함수에 사용한다.이전 글 참고 ([TypeScript] 함수 오버로드)