300x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- webpack
- 카페인
- 크로마틱
- 이슈번호자동화
- 우테코
- Husky
- react
- 우아한테크코스
- eslint 자동화
- 프로젝트 카페인
- git hooks
- 클린코드
- 협업
- 성능 베이스캠프
- prettier 자동화
- import정리
- chromatic
- CSS
- importOrder
- string-width
- 클로저
- storybook
- IDL attributes
- 유틸함수
- eslint에러 자동fix
- 프로젝트
- vscode
- JavaScript
- css instead of js
- 자바스크립트
Archives
- Today
- Total
FEB:)DAIN
Object.key/Entries/FromEntries 메서드 사용할 때도 타입이 잘 추론되게 할 수는 없을까? 본문
728x90
Object.key/Entries/FromEntries 메서드를 사용하면 타입스크립트가 key 타입을 제대로 추론하지 못했다. 제대로 타입 추론이 되도록 하고 싶어서 유틸 함수를 만들기로 했다.
// getTypedObjectKeys.ts
export const getTypedObjectKeys = <T extends object>(obj: T) => {
return Object.keys(obj) as Array<keyof T>;
};
// getTypedObjectEntries.ts
type Entries<T> = {
[K in keyof T]: [K, T[K]];
}[keyof T][];
export const getTypedObjectEntries = <T extends object>(obj: T) => {
return Object.entries(obj) as Entries<T>;
};
// getTypedObjectFromEntries.ts
export const getTypedObjectFromEntries = <T extends string | symbol, K>(
entries: readonly [T, K][]
): { [Key in T]: K } =>
entries.reduce(
(result, [key, value]) => {
result[key] = value;
return result;
},
{} as { [Key in T]: K }
);
이 유틸을 응용한 버전도 있다.
↓
/**
*
* @example getTypedObjectFromEntries(KEYS, VALUES)
* @returns key: value | value | value | ...
*
* @example getTypedObjectFromEntries(
KEYS,
KEYS.map(() => OBJECTS)
)
* @returns key: value[OBJECT, {...}, ...] (= key: object[])
*/
export const keyValuePairsToObject = <T extends string | symbol, K>(
keys: readonly T[],
values: readonly K[]
): { [Key in T]: K } =>
keys.reduce(
(result, key, index) => {
result[key] = values[index];
return result;
},
{} as { [Key in T]: K }
);
728x90
'코딩 > 공부' 카테고리의 다른 글
JavaScript Closure는 무엇일까? (0) | 2023.10.19 |
---|---|
[우테코-FE] 성능 최적화하기 (0) | 2023.09.03 |
웹팩에서 파비콘 설정하기 (2) | 2023.08.16 |
깃 커밋 메시지에 이슈 번호를 자동으로 입력할 순 없을까? (2) | 2023.07.04 |