TypeScript 타입 정리
Primitive 타입
- string, number, boolean
const getPrimitive = (arg1: string, arg2: number, arg3: boolean): [boolean, number, string] => {
return [arg3, arg2, arg1];
}
Any 타입
- 자바스크립트와 같음. 아무거나 다 될 수 있어서 위험함.
const getAny = (arg1: any, arg2: any, arg3: any): [any, any, any] => {
console.log(arg1 + 100); // any 타입은 아무거나 되기 때문에 위험함
return [arg3, arg2, arg1];
}
Unknown 타입
- 안전한 any 타입. 타입 검사를 통해 사용할 수 있음.
const getUnknown = (arg1: unknown, arg2: unknown, arg3: unknown): [unknown, unknown, unknown] => {
if (typeof arg1 === "number") console.log(arg1 + 100); // 타입 검사 후 안전하게 사용
// console.log(arg1 + 100); // 타입 검사 없으면 오류 발생
return [arg3, arg2, arg1];
}
Generic 타입
- 나만의 타입을 만드는 것.
function getGeneric<MyType1, MyType2, MyType3> (arg1: MyType1, arg2: MyType2, arg3: MyType3): [MyType3, MyType2, MyType1] {
return [arg3, arg2, arg1];
}
const result = getGeneric<string, number, boolean>("철수", 123, true); // 미리 타입을 지정
const getGeneric2 = <T, U, V>(arg1: T, arg2: U, arg3: V): [V, U, T] => {
return [arg3, arg2, arg1];
}
const result2 = getGeneric2("철수", 123, true); // 타입 추론
Utility 타입
- 기존 타입을 조작해서 새로운 타입을 만드는 것.
interface IProfile {
name: string;
age: number;
school: string;
hobby?: string;
}
// Partial 타입 (모든 속성이 선택 사항이 됨)
type PartialProfile = Partial<IProfile>;
// Required 타입 (모든 속성이 필수로 변경됨)
type RequiredProfile = Required<IProfile>;
// Pick 타입 (특정 속성만 필수로 선택)
type PickProfile = Pick<IProfile, "name" | "age">;
// Omit 타입 (특정 속성을 제외)
type OmitProfile = Omit<IProfile, "school">;
// Record 타입 (키가 eee이고 값이 IProfile인 객체)
type Names = "철수" | "영희" | "훈이";
type ProfileRecord = Record<Names, IProfile>;
// 객체의 key들로 Union 타입 만들기
type ProfileKeys = keyof IProfile; // "name" | "age" | "school" | "hobby"
let myProfileKey: ProfileKeys = "hobby";
// Type 과 Interface의 차이 (interface는 선언 병합 가능)
interface IProfile {
candy: number; // 선언 병합으로 추가됨
}
let profile: Partial<IProfile> = {
candy: 10,
};
'nest.js' 카테고리의 다른 글
TypeORM(GraphQL)을 활용한 API 구체적으로 만들기 (1) | 2024.06.03 |
---|---|
TypeORM 정리 (2024.06.03) (0) | 2024.06.03 |
TypeScript Generics, Typescript-utility (2024.05.30) (1) | 2024.05.30 |
Nest.js에서 GraphQL 사용해 보기 (2024.05.30) (0) | 2024.05.30 |
Nest.js API 구조 정리파일 구조 (2024.05.30) (0) | 2024.05.30 |