카테고리 없음
실무에서 쓰는 유용한 타입스크립트 5가지
유지남
2023. 5. 10. 16:12
Without falsy
배열을 인수로 받아, null, undefined, false와 같은 Falsy 값이 제외된 배열을 반환합니다
function withoutFalsy<T>(arr: T[]) {
return arr.filter(
(value): value is Exclude<typeof value, null | undefined | false> =>
!(value === null || value === undefined || value === false)
);
}
const items = [1, null, undefined, 3, 0]; // (number | null | undefined)[];
const numbers = withoutFalsy(items); // number[];
Merge type
두 개의 타입을 병합하여 새로운 타입을 생성합니다.
type Merge<F, S> = {
[P in keyof F | keyof S]: P extends keyof S ? S[P] : P extends keyof F ? F[P] : never;
};
type User = {
name: string;
};
type Content = {
subject: string;
};
type Profile = Merge<User, Content>; // { name: string; subject: string; }
View type
교차 타입의 모든 속성을 확인 할 수 있습니다.
type View<T> = {[P in keyof T]: T[P]};
type A = {
title: string;
}
type B = {
content: string;
}
type C = A & B; // A & B
type D = View<A & B> // { title: string; content: string }
Args
React에서 사용 할수 있는 유틸리티 타입 함수 입니다.
User 컴포넌트에서 onChange 속성의 파라미터 타입을 추출하고, change 함수의 파라미터로 사용하는 예제를 보여줍니다.
type Props<T extends (...args: any) => any> = Parameters<T>[0];
type PickByType<T, U> = { [P in keyof T as T[P] extends U ? P : never]: T[P] };
type Args<
T extends (...args: any) => any,
U extends keyof PickByType<Props<T>, Function>,
> = Parameters<Props<T>[U]>;
type UserProp = {
name: string;
onChange: (value: string) => void;
};
function User({ onChange }: UserProp) {
return {};
}
function change([value]: Args<typeof User, 'onChange'>) {
// value: string
}
Get property
TypeScript에서 자주 사용되는 유틸리티 함수 중 하나 입니다.
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}
const user = { name: "bob", email: "uznam8x@gmail.com" };
const a = getProperty(user, 'name'); // string