→ 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체.
function world(name) {
return 'hello ${name}';
}
// 타입스크립트
function world(name: string): string {
return 'hello ${name}';
}
let world2 = function(name) {
return 'hello ${name}';
}
// 타입스크립트
let world2 = function(name: string): string {
return 'hello ${name}';
}
let world3 = name => {
return 'hello ${name};
}
// 타입스크립트
let world3 = (name: string): string => {
return 'hello ${name};
}
let world4 = name => 'hello ${name}';
// 타입스크립트
let world4 = (name: string): string => 'hello ${name}';
let world5 = new Function("name",
'return "hello" + name');
→ 타입스크립트 컴파일러는 방정식의 한쪽에만 타입이 있더라도 타입을 추론할 수 있음.
이러한 타입 추론 형태를 contextual typing 라고 함.
// 일반적인 함수
let f12 = function (x: number, y: number): number {
return x + y;
}
// contextual typing
let f12: (baeValue: number, increment: number) => number = function(x, y) {
return x + y;
}
function buildName(firstName: string, lastName: string) {
return firstName + " " + lastName;
}
let res1 = buildName("Bob"); // Error, 인자가 1개이기 때문에 에러 발생.
let res2 = buildName("Bob", "Adams", "Kim"); // Error, 인자가 3개이기 때문에 에러 발생.
function buildName(firstName: string, lastName: string) {
if(lastName) return firstName + " " + lastName;
else return firstName;
}
let res1 = buildName("Bob"); // buildName의 두번째 매개변수가 선택적 매개변수이기 때문에 에러가 발생하지 않음.
let res2 = buildName("Bob", "Adams", "Kim"); // Error, 인자가 3개이기 때문에 에러 발생.
function buildName(firstName: string, lastName = "Smith") {
return firstName + " " + lastName;
}
// 값을 전달하지 않거나, undefined여도 default 값이 할당되어 있기 때문에 에러가 발생하지 않음.
let res1 = buildName("Bob"); // "Bob Smith"
let res2 = buildName("Bob", undefined); // "Bob Smith"
let res3 = buildName("Bob", "Adams"); // "Bob Adams"
let res4 = buildName("Bob", "Adams", "Kim"); // Error, 인자가 3개이기 때문에 에러 발생.
function buildName(firstName: string, ...restOfName: string[]) {
return firstName + " " + restOfName.join(" ");
}
// buildName 호출 시, 2-4번째 인수는 나머지 매개변수가 할당되어 Array로 선언됨.
// ...restOfName은 나머지 인자들을 문자열 배열로 받아 블럭 구문에 넘긴다.
let employeeName = buildName("Joseph", "Samuel", "Lucas", "MacKinzie"); // "Joseph Samuel Lucas Mackinzie"