본문 바로가기

전체 글34

타입 호환성 타입 호환타입스크립트 코드에서 특정 타입의 호환성을 의미한다. 아래코드는 타 언어였다면 바로 에러가 일어났을 것이다.interface Ironman { name: string; }class Avengers { name: string; }let m: Ironman;m = new Avengers();하지만 JS는 기본적으로 객체 리터럴, 익명함수 등을 사용하므로 명시적인 타입 지정보다 코드의 구조 관점에서 타입을 지정하는 것이 나은 편이다. 구조적 타이핑코드 구조 관점에서 서로 호환되는지를 판단하는 것.interface Avengers { name: string;}let hero: Avengers;// 타입스크립트가 추론한 타입은 { name: string; location: string; } 입니다.le.. 2025. 4. 15.
타입 추론 타입 추론타입스크립트가 코드를 해석해나가는 동작기본적으로 변수 선언 및 초기화 시 타입 추론이 일어난다.변수, 속성, 인자 기본 값, 함수 반환값 등 설정 시에도 일어난다.Best Common Type타입 추론 시, 몇 개의 코드를 바탕으로 추론하여 가장 근접한 타입으로 추론하게 된다.let x = [1, 2, null] 같은 경우 숫자형, 널 이렇게 구분되고, 이 때 Best common type 알고리즘에 의해 가장 호환성 높은 타입으로 추론된다.타입 체킹에 있어, 타입스크립트는 값의 형태에 기반하여 판단한다.Duck Typing객체 변수 및 메서드 집합이 객체의 타입을 결정한다. (동적 타이핑)Structural Subtyping객체의 실제 구조나 정의에 따라 타입을 결정한다.문백상의 타이핑타입스크.. 2025. 4. 15.
제네릭(Generics) C++ 에서의 제네릭과 동일하다.function getText(text: T): T { return text;}getText('hi');getText(10);getText(true);- 이렇게 T에 자료형이 들어가며 동작한다. 타입스크립트에서 쓰는 이유function echo(text: string): string { return text; }function echo(text: any): any { return text; }만약 모든 타입에 대해서 허용하고 싶다면 두 번째 처럼 any 를 쓰면 된다.단, any 타입은 타입검사를 하지 않기 때문에, 동작에는 문제가 없지만 파라미터로 어떤 타입이 들어갔고, 어떤 값이 반환 되는지 알 수 없다. 그래서 제네릭을 사용한다.그래서 제네릭을 사용하면 함수를 호출.. 2025. 4. 15.
Class 특성 타입스크립트의 class 에 대해서 몇 가지 특성을 알아보자. readonlyclass Developer { readonly name: string; constructor(theName: string) { this.name = theName; }}let john = new Developer("John");john.name = "John"; // error! name is readonly.클래스의 멤버 앞에 readonly 를 붙이면, 읽기모드로만 접근 가능하다.또한 readonly 를 쓰게되면 생성자 함수에다가 초기화 코드를 넣어줘야하므로, 아래와 같이 코드 길이를 줄일 수 있다.class Developer { readonly name: string; constructor.. 2025. 4. 14.
Union Type, Intersection Type Union Type 정의 방식- || 연산자랑 같은 의미.- function example(text: string | number) { ... } 처럼 | 연산자를 이용해서 타입을 여러 개 연결하는 방식 장점// any를 사용하는 경우function getAge(age: any) { age.toFixe(); // 에러 발생, age의 타입이 any로 추론되기 때문에 숫자 관련된 API를 작성할 때 코드가 자동 완성되지 않는다. return age;}// 유니온 타입을 사용하는 경우function getAge(age: number | string) { if (typeof age === 'number') { age.toFixed(); // 정상 동작, age의 타입이 `number`로 추론되기 때.. 2025. 4. 14.
enum 자료형 C++을 비롯한 타 언어와 개요는 동일하다.어떻게 쓰는지만 알아보자.enum Response { a = 100, b, c, d}function respond(name: string, msg: Response) { console.log(name); console.log(msg);}respond("mr.kim", Response.c);숫자, 문자 모두 사용법은 같다. 단, 문자형 이넘은 숫자형과 다르게 auto incrementing 이 없다.* 숫자와 문자를 섞어 Heterogeneous Enums 를 쓸 수는 있지만 권장되지는 않는다.  enum 의 특징1. 런타임 시점런타임(실행) 할 때, 실제 객체의 형태로써 존재한다.enum Variables { X, Y, Z}function getX(.. 2025. 4. 13.