하나의 값만 가진 타입. 값 그자체가 타입이 되는 것
길이와 타입이 고정된 배열
ts에서 객체는 구조를 기준으로 타입을 정의한다.'구조적 타입 시스템(Property Based TS)'이라고 정의한다. c언어나 자바에서는 객체는 이름을 기준으로 타입을 정의한다. '명목적 타입 시스템'이라고 부른다.
ts에서 타입을 변수처럼 사용하는 문법.객체 타입의 정의를 더욱 유연하게 해주는 문법.key와 value의 규칙을 기준으로 객체의 타입을 정의할 수 있는 문법인덱스 시그니쳐의 value 타입과 직접 추가한 프로퍼티의 value 타입이 호환되거나 일치해야 합니다.
여러가지 값들에 각각 이름을 부여해 열거해두고 사용하는 타입
특정 변수의 타입을 우리가 확실히 모를때 사용any 코드를 컴파일 하거나 ts-node로 실행해보면 런타임 오류가 발생합니다.특정 변수가 당장 어떤 값을 받게 될 지 모른다면 any 타입으로 정의하는 것 보단 unknown 타입을 이용하는게 훨씬 안전한 선택이 됩니다.
아무것도 없음을 의미하는 타입불가능한 타입
Unknown 타입은 모든 타입의 슈퍼타입이다. 모든 타입은 unknown 타입의 부분집합이다.Never 타입은 모든 타입의 서브타입이다.any 타입은 사실상 타입 계층도를 완전히 무시합니다.any는 never을 제외하고 모든 타입의 슈퍼타입이 될 수도 있고 모든 타입
객체 타입은 프로포티를 기준으로 조건이 적은 객체가 슈퍼타입이 된다.초과 프로퍼티 검사란? 이 기능은 타입에 정의된 프로퍼티 외의 다른 초과된 프로퍼티를 갖는 객체를 변수에 할당할 수 없도록 막습니다.
여러개의 타입을 합성해서 새롭게 만들어낸 타입합집합 타입과 교집합 타입이 존재한다.
타입추론이란? 타입스크립트는 타입이 정의되어 있지 않은 변수의 타입을 자동으로 추론합니다.일반적인 변수 선언의 경우 초기값을 기준으로 타입이 잘 추론됩니다.함수는 return문 뒤에 오는 반환문을 기준으로 타입을 추론한다.변수를 선언할때 초기값을 생략하면 암시적인 a
값 as 단언 <- 단언식A as B\-> A가 B의 슈퍼타입이거나\-> A가 B의 서브타입이어야 한다.좋지 않은 방법이다. 타입 단언때에만 사용할 수 있는 const 타입이 존재특정 값을 const 타입으로 단언하면 마치 변수를 const로 선언한 것 과 비슷하
조건문 등을 이용해 넓은 타입에서 좁은 타입으로 타입을 상황에 따라 좁히는 방법if (typeof === …) 처럼 조건문과 함께 사용해 타입을 좁히는 이런 표현들을 “타입 가드”라고 부른다.
교집합이 없는 타입들로만 만든 유니온 타입을 말함 동시에 여러가지 상태를 정의해야 하는 객체의 타입을 정의할떄는 선택적 프로퍼티를 사용하는 것보다는 상태에 따라서 타입을 잘게 쪼개서 state, tag같은 프로퍼티를 추가해서 서로소 유니언 타입으로 만들어 주는 것이 좋
어떤 타입의 매개변수를 받고, 어떤 타입의 결과값을 반환하는지 이야기선택적 매개변수는 필수 매개변수 앞에 올 수 없습니다.rest 매개변수는 나머지 매개변수라고 하며, 스프레드 연산자처럼 기호 ‘...’으로 표기합니다. rest 매개변수는 함수에 전달한 인수들을 순차적
함수 타입을 타입 별칭과 함께 별도로 정의함수 타입 표현식과 동일하게 함수의 타입을 별도로 정의하는 방식
특정 함수 타입을 다른 함수 타입으로 괜찮은지 판단하는 것다음 2가지 기준으로 함수 타입의 호환성을 판단하게 됩니다.두 함수의 반환값 타입이 호환되는가두 함수의 매개변수의 타입이 호환되는가
하나의 함수를 매개변수의 개수나 타입에 따라 다르게 동작하도록 만드는 문법하나의 함수 func를 만든다.일단 모든 매개변수는 넘버타입으로 설정Ver1. 매개변수가 1개일 때에는 매개변수에 20을 곱한 값을 출력Ver2. 매개변수가 3개일 때에는 모든 매개변수를 더한 값
참 또는 거짓을 반환하는 함수를 이용해 우리 입맛대로 타입 가드를 만들 수 있도록 도와주는 타입스크립트의 문법in 연산자는 만약 Dog 타입의 프로퍼티가 다음과 같이 중간에 이름이 수정되거나 추가 또는 삭제될 경우에는 타입 가드가 제대로 동작하지 않을 수도 있습니다.
인터페이스란 타입 별칭과 동일하게 타입에 이름을 지어주는 또 다른 문법타입 별칭에서는 Union이나 Intersection 타입을 정의할 수 있었던 반면 인터페이스에서는 할 수 없습니다.Union이나 Intersection 타입을 정의 방법인터페이스로 만든 타입을 Un
하나의 인터페이스를 다른 인터페이스들이 상속받아 중복된 프로퍼티를 정의하지 않도록 도와주는 문법interface 타입이름 extends 확장할타입이름 형태로 extends 뒤에 확장할 타입의 이름을 정의하면 해당 타입에 정의된 모든 프로퍼티를 다 가지고 오게 됩니다.
타입 별칭은 동일한 스코프 내에 중복된 이름으로 선언할 수 없는 반면 인터페이스는 가능합니다.중복된 이름의 인터페이스 선언은 결국 모두 하나로 합쳐지기 때문입니다.동일한 이름의 인터페이스들이 합쳐지는 것을 선언 합침(Declaration Merging)이라고 부릅니다.
위의 중복된 코드를 해결할 클래스 문법 사용하기앞서 만든 Student 클래스를 기반으로 추가적인 필드와 메서드를 갖는 클래스를 선언하고 싶다면 상속을 하면 된다.
생성자 함수에서 필드의 값들을 잘 초기화 해 준다면 필드 선언시의 초기값은 생략해도 됩니다.클래스를 타입으로 사용하면 해당 클래스가 생성하는 객체의 타입과 동일한 타입이 됩니다.
접근 제어자(Access Modifier)는 타입스크립트에서만 제공되는 기능으로클래스의 특정 필드나 메서드를 접근할 수 있는 범위를 설정하는 기능입니다.
인터페이스와 클래스 같이 사용하는 방법
제네릭 함수는 두루두루 모든 타입의 값을 다 적용할 수 있는 그런 범용적인 함수인수에 특정 타입의 인수를 넣었을때 타입을 저절로 그 타입이 나오도록 설정하고 싶을떄
만약 2개의 타입 변수가 필요한 상황이라면 다음과 같이 T, U 처럼 2개의 타입 변수를 사용해도 됩니다.다양한 배열 타입을 인수로 받는 제네릭 함수를 만들어야 한다면 다음과 같이 할 수 있습니다.튜플 타입과 나머지 파라미터를 이용한 방법타입 변수를 제한하는 사례 타입
map메서드 수정 forEach 메서드
제네릭 인터페이스 ➡️ 인덱스 시그니쳐와 함께 사용하기 ➡️ 제네릭 타입 별칭 ➡️ 제네릭 인터페이스의 활용 예시 👍 제네릭 인터페이스로 바꾸기
제네릭 클래스 위의 코드 제네릭 클래스로 바꾸기
프로미스(Promise) 😎 Promise는 제네릭 클래스로 구현되어 있습니다. ➡️ 프로미스를 반환하는 함수의 타입을 정의
Post타입의 author 프로퍼티가 수정, 추가되어도 따로 수정 안해줘도 된다.Post"author"는 Post 타입으로부터 author 프로퍼티의 타입을 추출합니다. 대괄호 속에 들어가는 String Literal 타입인 “author” (값이 아니라 타입이다.)
위의 코드 같이 작성하면 key의 타입을 “name” | “age”로 정의했는데 이렇게 정의하면 다음과 같이 Person 타입에 새로운 프로퍼티가 추가되거나 수정될 때 마다 이 타입도 계속 바꿔줘야 합니다.Keyof 연산자를 이용하면 이런 점을 쉽게 해결할 수 있다.
템플릿 리터럴 타입은 타입 조작 기능들 중 가장 단순한 기능으로템플릿 리터럴을 이용해 특정 패턴을 갖는 String 타입을 만드는 기능입니다.ColoredAnimal 타입에 추가해야하는 타입이 점점 많아지게 됩니다. 이럴 때 바로 템플릿 리터럴 타입을 이용하면 좋습니다
조건부 타입은 extends와 삼항 연산자를 이용해 조건에 따라 각각 다른 타입을 정의하도록 돕는 문법
분산적인 조건부 타입은 다음과 같이 동작합니다.타입 변수에 할당한 Union 타입 내부의 모든 타입이 분리됩니다. 따라서 StringNuberSwitch<number | string> 타입은 다음과 같이 분산됩니다.\-> StringNumberSwitch<
infer는 조건부 타입 내에서 특정 타입을 추론하는 문법