: 제네릭, 맵드 타입, 조건부 타입 등의 타입 조작기능을 이용해 실무에서 자주 사용되는 타입을 미리 만들어 놓은것 Documentation - Utility Types Types which are globally included in TypeScript www.typescriptlang.org Partial : 특정 객체 타입의 모든 프로퍼티를 선택적 프로퍼티로 바꿔주는 타입 interface Post { title: string; tags: string[]; content: string; thumbnailURL?: string; } type Partial = { [key in keyof T]?: T[key]; }; const draft: Partial = { title: "제목 나중에", conten..
Front/typescript
: extends와 삼항연산자를 이용해서 조건에 따라 타입을 결정하는 문법 type A = number extends string ? string : number; type ObjA = { // 슈퍼타입 a: number; }; type ObjB = { // 서브타입 a: number; b: number; }; type B = ObjB extends ObjA ? number : string // 진실 => type B => number type 제네릭 조건부 타입 type StringNumberSwitch = T extends number ? string : number; let varA: StringNumberSwitch; // 진실 => string let varB: StringNumberSwitch..
타입 조작 : 원래 존재하던 타입들을 타입스크립트의 문법을 이용해서 상황에 따라 각각 다른 타입으로 변환하는 기능 제네릭 인덱스드 엑세스 타입 keyof 연산자 Mapped(맵드) 타입 템플릿 리터럴 타입 조건부 타입 인덱스드 엑세스 타입 (Indexed Access Type) : 인덱스를 이용해 다른 타입내에 특정 프로퍼티의 타입을 추출하는 타입, 객체, 배열, 튜플 타입에 사용 객체 타입 - 프로퍼티의 타입이 추가/수정 -> 즉시반영, index에 들어가는 문자열은 값이 아닌 타입 interface Post { title: string; content: string; author: { id: number; name: string; age: number; }; } // Post 타입으로부터 특정 프로퍼..
제네릭(Generic) 함수 : 모든타입을 다 적용할 수 있는 범용적인 함수 function func(value: T): T { // T 타입변수 return value; } let num = func(10); // type : number let bool = func(true); // type : boolen let str = func("string"); // type : string // 타입 변수에 할당할 타입을 직접 명시 -> number[] 타입으로 자동 추론 되기 때문에 let arr = func([1, 2, 3]); // 튜플 타입 타입변수 T 선언, 함수를 호출할때 인수에 따라 타입이 결정 제네릭 함수 활용 예제 타입 변수가 2개 인 경우 function swap(a: T, b: U) { ..
const member = { name: "이마크", age: 25, position: "leader", work() { console.log("singing"); }, }; class Member { //필드 name: string = ""; // 초깃값 설정 age: number = 0; position: string = "; } ** tsconfig.json 에서 "noImplicitAny" : false 추가로 암시적 any 타입 허용 가능 필드의 초깃값 설정이 가능 -> 생성자에서도 초기화 가능 const member = { name: "이마크", age: 25, position: "leader", work() { console.log("singing"); }, }; class Member { ..
인터페이스 : 타입에 이름을 지어주는 또 다른 문법, 객체의 구조를 정의하는데 특화 interface Person { readonly name: string; // 읽기 전용 프로퍼티 age?: number; // 선택적 프로퍼티 sayHi: () => void; // 메서드 타입 정의 (함수타입 표현식) sayHi: (a: number, b: number) => void; // ❌ 메서드의 오버로딩 구현이 불가 sayHi(): void; // 메서드 타입 정의 (호출 시그니처) sayHi(a: number, b: number): void; } | number // ❌ Union, Intersection 타입 정의 type Type1 = number | string | Person; type Type2 ..