[TypeScript] 타입스크립트 함수 타입 정의 방법
TypeScript 2023. 7. 25. 17:54

함수 타입 정의 방법 타입스크립트는 일반적인 변수에서뿐만 아니라 함수에도 타입을 정해줘야 한다. 일단 생각해 보자. 함수에 타입을 줄만한 값이 뭐가 있을까? 바로 매개변수와 리턴값이다. 함수에서는 매개변수와 리턴값에 각각 타입을 부여해 줄 수 있으며, 기본 타입과 똑같이 다른 함수 타입과 호환되기도 한다. 일반적인 방법 function func(a: number, b: number): number { return a + b; } // 결과값에는 타입을 따로 적지 않아도 자동으로 리턴값의 타입을 추론해준다. function func(a: number, b: number) { return a + b; } // 화살표 함수도 똑같다. const add = (a: number, b: number) => a + ..

[TypeScript] 타입 단언으로 변수에 타입 부여해주기 (vs 타입 선언)
TypeScript 2023. 7. 23. 18:52

타입 선언과 타입 단언 변수에 타입을 부여하는 방식에는 가장 일반적인 방법인 타입 선언이 있다. 또한 오늘 설명할 타입 단언이라는 것도 있다. 내용을 미리 스포(?)하자면, 타입스크립트 책에서도 웬만하면 타입 선언으로 타입을 부여하고 타입 단언은 특별한 상황이 아니면 사용하지 말라고 되어있다. 타입 단언은 어떻게 쓰는 것이고 무슨 허점이 있길래 되도록이면 사용을 하지 말라고 하는지 한번 살펴보자. 타입 단언으로 타입 부여하기 type Person = { name: string; color: string; } // 오류 뜨는 경우 let user: Person = {}; // 지금 말고 추후에 추가하고 싶은데.. name과 color가 없다고 오류가 뜨네? // 정상 작동하는 경우 let user: Per..

[TypeScript] 타입 추론 : 타입 넓히기와 타입 좁히기
TypeScript 2023. 7. 20. 16:59

타입 넓히기 let num = 1; 위와 같이 숫자 1이 할당된 변수 num이 있다고 하자. 타입스크립트에서는 변수를 선언할 때 항상 변수 이름 옆에 타입을 쓴다고 했었다. 하지만, 모든 변수에 타입을 일일이 적는 것도 힘들고 번거로울 수 있기 때문에 타입스크립트는 변수의 초깃값을 기준으로 타입을 자동적으로 추론하는 기능을 제공해 준다. 그렇다면 자동으로 타입이 추론된 변수 num의 타입은 무엇일까? 바로 number 타입이다. 하지만, 일부는 이런 생각을 할 수도 있다. "숫자 1을 넣었으니까 숫자 타입이 아닌 숫자 리터럴 타입으로 추론되는 게 맞지 않나?" 물론, 이 말도 맞지만 타입스크립트의 타입 추론은 기본적으로 타입 넓히기에 입각하여 추론된다. 타입 넓히기란 타입을 추론할 때 좁은 타입(ex. ..

[TypeScript] 타입스크립트 타입 호환성 (슈퍼 타입과 서브 타입)
TypeScript 2023. 7. 17. 20:37

타입의 호환성 타입스크립트의 타입들은 각자 타입마다 호환되는 타입이 있고 호환되지 않는 타입이 존재한다. 이전 글에서 unknown 타입에 대해 설명할 때, 값으로서는 사용하지 못하는 타입이라고 했었다. (unknown 타입에 number 타입은 들어가지만, number 타입에 unknown 타입은 들어가지 못한다.) 이게 바로 타입의 호환성이며, 타입마다 어떤 타입은 값으로 사용이 가능하지만 어떤 타입은 불가능한 걸 뜻한다. 타입에는 슈퍼 타입과 서브 타입이 있다. (슈퍼 타입은 부모 타입, 서브 타입은 자식 타입이라고 봐도 무방하다.) 슈퍼 타입은 서브 타입을 반환할 수 있지만, 서브 타입은 슈퍼 타입을 반환하지 못한다. 예를 들어, void 타입과 undefined 타입을 놓고 비교했을 때 void..

[TypeScript] 타입스크립트 기초 : 변수 뒤에 타입 달기
TypeScript 2023. 7. 15. 01:13

원시 타입 원시 타입이란 숫자, 문자열, boolean, null, undefined 등 동시에 한 개의 값만 저장할 수 있는 타입들을 말한다. 배열과 객체를 제외한 거의 대다수의 타입들을 원시 타입이라고 할 수 있다. Number(숫자) 타입 let num1: number = 1; let num2: number = Infinity; let num3: number = NaN; num1 = 'str'; // Error! num1.toUpperCase(); // Error! 숫자 타입에는 말 그대로 숫자 그리고 무한대(Infinity), NaN까지 값으로 들어간다. 처음에 변수를 선언할 때 타입까지 지정하기 때문에 해당하는 타입에 맞는 값으로만 재할당이 가능하다. 위의 예시를 보면, 숫자 타입인 num1 변..