함수 타입 표현식다음과 같이 함수 타입을 타입 별칭과 함께 별도로 정의할 수 있습니다. 이를 함수 타입 표현식(Function Type Expression)이라고 부릅니다.type Add = (a: number, b: number) => number;const add: Add = (a, b) => a + b;변수 add의 타입을 함수 타입 표현식으로 정의한 함수 타입으로 정의했습니다.이렇게 함수 타입 표현식을 이용하면 함수 선언 및 구현 코드와 타입 선언을 분리할 수 있어 유용합니다. 함수 타입 표현식은 다음과 같이 여러개의 함수가 동일한 타입을 갖는 경우에 요긴하게 사용됩니다.const add = (a: number, b: number) => a + b;const sub = (a: number, b: ..
TypeScript
함수의 타입을 정의하는 방법다음과 같은 자바스크립트 함수가 있을 때, 이 함수를 다른 사람에게 설명하는 가장 좋은 방법은 이 함수가 어떤 매개변수를 받고 어떤 값을 반환 하는지 이야기 하는 것 입니다.// 함수를 설명하는 가장 좋은 방법// 어떤 매개변수를 받고, 어떤 결과값을 반환하는지 설명function func(a, b) { return a + b;} 그럼 타입스크립트에서는 어떨까요? 자바스크립트에서 함수를 소개하는 방식과 비슷합니다. 대신 타입만 추가되면 됩니다. 어떤 타입의 매개변수를 받고, 어떤 타입의 값을 반환하는지 이야기 하면 됩니다. function func(a: number, b: number): number { return a + b;}참고로 함수의 반환값 타입은 자동으로 추론되기..
서로소 유니온 타입서로소 유니온 타입은 교집합이 없는 타입들 즉 서로소 관계에 있는 타입들을 모아 만든 유니온 타입을 말 합니다. 예시와 함께 살펴봅니다.다음과 같은 간단한 회원 관리 프로그램이 있다고 가정합니다.type Admin = { name: string; kickCount: number;};type Member = { name: string; point: number;};type Guest = { name: string; visitCount: number;};type User = Admin | Member | Guest;function login(user: User) { if ("kickCount" in user) { // Admin console.log(`${user.nam..
타입 좁히기다음과 같은 함수가 하나 있다고 가정하겠습니다.function func(value: number | string) { } 이때 매개변수 value의 타입이 number | string 이므로 함수 내부에서 다음과 같이 value가 number 타입이거나 string 타입일 것으로 기대하고 메서드를 사용하려고 하면 오류가 발생합니다.function func(value: number | string) { value.toFixed() // 오류 value.toUpperCase() // 오류} 만약 value가 number 타입일거라고 기대하고 toFixed 메서드를 사용하고 싶다면 다음과 같이 조건문을 이용해 value의 타입이 number 타입임을 보장해줘야 합니다.function func(va..
타입 단언이란다음과 같은 코드가 있다고 가정합니다.type Person = { name: string; age: number;};let person: Person = {};person.name = "";person.age = 23;변수 person은 Person 타입으로 정의 되었지만 초기화 할 때에는 빈 객체를 넣어두고 싶다고 가정하겠습니다. 그러나 타입스크립트에서는 이런 경우를 허용하지 않습니다. 빈 객체는 Person 타입이 아니므로 오류가 발생하게 됩니다.이럴 땐 다음과 같이 이 빈 객체를 Person 타입이라고 타입스크립트에게 단언해주면 됩니다.type Person = { name: string; age: number;};let person = {} as Person;person.name..
타입 추론이란타입스크립트는 타입이 정의되어 있지 않은 변수의 타입을 자동으로 추론합니다. 이런 기능을 “타입 추론”이라고 합니다.let a = 10;// number 타입으로 추론따라서 타입스크립트는 프로그래머에게 모든 변수에 일일이 타입을 정의하지 않아도 되는 편리함을 제공합니다.그러나 모든 상황에 타입을 잘 추론하는 것은 아닙니다. 예를 들어 다음과 같이 함수의 매개변수 타입은 자동으로 추론할 수 없습니다.function func(param){ // 오류} 그리고 이렇게 타입 추론이 불가능한 변수(ex 매개변수)에는 암시적으로 any 타입이 추론됩니다. 그러나 엄격한 타입 검사 모드 (tsconfig.json의 strict 옵션을 true로 설정)에서는 이런 암시적 any 타입의 추론을 오류로 판단하..
대수 타입(Algebraic type)이란대수 타입이란 여러개의 타입을 합성해서 만드는 타입을 말합니다.대수 타입에는 합집합 타입과 교집합 타입이 존재합니다. 합집합은 Union 타입, 교집합은 Intersection 타입이라고 부릅니다. 1. 합집합(Union) 타입다음과 같이 string과 number의 유니온 타입을 정의할 수 있습니다. 바 | 를 이용합니다.// 합집합 타입 - Union 타입let a: string | number; 변수 a에는 number 타입과 string 타입에 해당하는 값이라면 뭐든 저장할 수 있습니다.// 합집합 타입 - Union 타입let a: string | number;a = 1;a = "hello"; 유니온 타입에 참여하는 타입들의 개수에는 제한이 없습니다. 만..
객체 타입의 호환성모든 객체 타입은 각각 다른 객체 타입들과 슈퍼-서브 타입 관계를 갖습니다. 따라서 업 캐스팅은 허용하고 다운 캐스팅은 허용하지 않습니다. 다음 예시와 함께 자세히 살펴보겠습니다.type Animal = { name: string; color: string;};type Dog = { name: string; color: string; breed: string;};let animal: Animal = { name: "기린", color: "yellow",};let dog: Dog = { name: "돌돌이", color: "brown", breed: "진도",};animal = dog; // ✅ OKdog = animal; // ❌ NO Animal 타입의 변수 anim..