function A(a,b,c) { // js 함수
return a + b + c;
}
-----------------------------
-> type 부여
function A(a: number, b: number, c: number): number {
return a + b + c
}
-----------------------------
-> 반환값이 없거나 반환값에 타입을 정하지 않을 때는 void 라도 사용!
function A(a: number, b: number, c: number): void {
console.log(a + b + c);
}
Typescript 에서는 함수의 인자를 모두 필수 값으로 간주한다.
따라서, 함수의 매개변수를 설정하면undefined
나null
이라도 인자로 넘겨야하며 컴파일러에서 정의된 매개변수 값이 넘어왔는지 확인한다.
-> 즉, 정의된 매개변수 값만 받을 수 있고 추가로 인자를 받을 수 없다는 의미!
// 일반 js 코드
function A(a,b,c) {
return a + b + c;
}
A(1,2,3); -> 6
A(1,2,3,4) -> 6
A(1,2) -> Nan // 매개변수로 c 자리에 undefined가 들어가기 때문에.
// Type 부여
function A(a: number,b: number,c: number): number {
return a + b + c;
}
A(1,2,3); -> 6
A(1,2,3,4) -> Error, too many parameters
A(1,2) -> Error, too few parameters
// 위와 같은 특성은 정의된 매개변수의 갯수 만큼 인자를 넘기지 않아도 되는 js 의 특성과 반대된다.
// js의 특성을 어느정도 살리고 싶다면 ? 를 사용해보자.
->
function A(a: number,b?: number,c?: number): number {
return a + b + c;
}
A(1,2,3); -> 6
A(1,2,3,4) -> Error, too many parameters
A(1,2) -> 3
// 매개변수 초기화!
-> ES6 문법과 동일!
function A(a: number,b: number,c = 10): number {
return a + b + c;
}
A(1,2,3); -> 6
A(1,2,3,4) -> Error, too many parameters
A(1,2,undefined) -> 13
A(1,2) -> 13
// Rest 문법이 적용된 매개변수
function sum(a: number, ...nums: number[]): number {
let result = 0;
for (let i in nums) {
result = result + nums[i];
}
return a + result;
}
sum(1,2,3,4) -> 10