728x90
Get Return Type
type MyReturnType<T extends (...args: any) => any> = T extends (
...args: any
) => infer R ? R : never;
Omit
type MyOmit<T, K extends keyof T> = { [P in Exclude<keyof T, K>]: T[P] };
T의 키 집합의 부분집합인 K를 제외한 T의 요소를 가진 오브젝트 타입.
Readonly2
type MyReadonly2<T, K extends keyof T = keyof T> = Readonly<Pick<T, K>> & {
[P in Exclude<keyof T, K>]: T[P];
};
T의 부분집합 K에 해당하는 프로퍼티를 Readonly 하고 나머지 차집합의 프로퍼티를 유지하는 오브젝트 타입.
Deep Readonly
type DeepReadonly<T> = (keyof T) extends never
? T : { readonly [P in keyof T]: DeepReadonly<T[P]> }
T의 키 원소들을 readonly하고 값을 재귀적으로 타입 분석, 만약 key가 없는 타입인 경우 그대로 T 타입을 사용한 오브젝트 타입.
Tuple to union
type TupleToUnion<T extends any[]> = keyof { [P in T[number]]: T[P] };
// type TupleToUnion<T extends any[]> = T[number];
Chainable options
type Chainable<T = {}> = {
option<K extends string, V extends any>(key: K, value: V): Chainable<T & { [key in K]: V }>
get(): T
}
Last of array
type Last<T extends any[]> = T extends [...infer R, infer U] ? U : never;
Pop
type Pop<T extends any[]> = T extends [...infer R, infer U] ? R : never;
Type loopup
type LookUp<U, T> =
U extends { type: string }
? T extends U['type']
? U
: never
: never;
'메모' 카테고리의 다른 글
나만의 홈랩(HomeLab) 구축기 (0) | 2023.11.10 |
---|---|
우당탕탕 k8s 기록 (0) | 2023.11.10 |
Node.js 플랫폼 (0) | 2022.02.04 |
Type<Challenge[]> #Easy (0) | 2022.02.04 |
Typescript로 구현한 Linked list (0) | 2022.02.01 |