조건부로 타입 만들기 1. 파라미터로 string을 넣으면 string, 아니면 unknown으로 만들기 type Age = T extends string ? string : unknown; // 조건식은 extends 사용해야함 let a: Age; // let a: string let a2: Age; // let a2: unknown ex) 그럼 파라미터로 array 자료를 입력하면 array의 첫 자료의 타입을 그대로 남겨주고, array 자료가 아니라 다른걸 입력하면 any 타입을 남겨주는 타입은 어떻게 만들까? type FirstItem = T extends any[] ? T[0] : any; let age1: FirstItem; let age2: FirstItem; infer 키워드 조건문에서..
keyof 연산자 object 타입에 사용하면 object 타입이 가지고 있는 모든 key 값을 union type으로 합쳐서 보내줌 type PersonKeys = keyof Person; // 'age' | 'name' let a: PersonKeys = 'name'; - 잘못 만든 타입을 변경하기 = 타입 매핑하기 type Car = { color: boolean; model: boolean; price: boolean | number; }; type typeChanger = { [key in keyof MyType]: string; // 왼쪽에 있는 key값이(MyType = Car = color & model & price) 있으면 string이 됨 }; type newType = typeCha..
index signatures object 자료에 타입을 미리 만들어주고 싶은데 1. object 자료에 어떤 속성들이 들어올 수 있는지 아직 모르는 경우 2. 타입지정할 속성이 너무 많은 경우 이럴 때 사용 interface StringOnly { [key: string]: string; // 모든 string으로 들어오는 key값에 할당되는 value는 string 이어야함 } let obj: StringOnly = { name: 'kim', age: '20', location: 'seoul', }; /* interface StringOnly { age: number; // 에러남. Property 'age' of type 'number' is not assignable to 'string' inde..
implements 키워드 interface의 용도가 object 타입 지정 외에 class 타입을 확인하는 것도 있음 이때, implements 키워드가 필요함 implements: interface에 들어있는 속성 확인. class에 타입 할당 or 변형 키워드 x /* class Car { model: string; price: number = 100; constructor(a: string) { this.model = a; } } let 내차 = new Car('chacha') */ // class가 model, price 속성을 가지고 있는지 타입으로 확인하기 interface CarType { model: string; price: number; } class Car implements Car..
d.ts 파일 타입만 저장할 수 있는 파일 형식(definition의 약자인 d) 자바스크립트로 컴파일 x 자동 글로벌 모듈 x = (로컬 모듈) 1. 사용처 타입 정의만 따로 저장해두고 import해서 사용 프로젝트에서 사용하는 타입을 쭉 정리해놓을 레퍼런스용 2. d.ts 파일 세팅 /* (tsconfig.json) "compilerOptions" : { "declaration" : true // ts파일마다 d.ts 파일 자동생성 세팅 방법 "typeRoots" : ["./types"] // 이 폴터 안에 있는 타입들은 글로벌하게 사용 } */ export type Age = number; export interface Person { name: string; } - 유명한 js 라이브러리들은 d...
