티스토리 뷰
728x90
export type LocaleEntry<TCategoryDefinition extends Record<string, unknown>> = {
[P in keyof TCategoryDefinition]?: TCategoryDefinition[P] | null;
} & Record<string, unknown>; // Unsupported & custom entries
1. 위의 TCategoryDefinition은 Record<string, unknown>을 상속하므로 Record 타입과 동일하게 생각하면 된다.
2. LocalEntry 타입은 key, value 타입의 일반 객체로 key의 경우는 Record에서 나온 key들을 P에 담고 있고 각 키에 대응하는 값의 타입을 값으로 한다.
3. 키가 ?가 붙어 있어 optional이다. keyof는 해당 타입, 객체의 모든 키들을 UNION하여 가져 온다. | 로 묶은 집합이다.
4 마지막 &은 앞의 정의한 타입에 덮어쓰는 부분으로 해당 부분만 예외적으로 적용된다.
export type ColorDefinition = LocaleEntry<{
/**
* Human-readable color names.
*/
human: string[];
/**
* Color space names.
*/
space: string[];
}>;
5. 위의 블록을 사용하는 코드로 여기서는 ColorDefinition을 정의하고 있다. LocalEntry타입으로 human: string[], space: string[]이 option이 TCategoryDefinition으로 전달되어 human, space가 optional인 타입으로 정의 된다.
import type { ColorDefinition } from '../../..';
import space from './space';
const color: ColorDefinition = {
space,
};
export default color;
위의 코드는 ColorDefinition 을 사용하는 부분인데 ColorDefinition 타입의 color에 기본 색상 값 space: string[]를 지정하고 있다.
결국 위의 복잡한 코드로 부터 얻을 수 있는 것은 타입 safety 밖에 없다. over engineering 이지만 이런 코드가 오픈 소스에 너무 많고 이것이 기본 패턴처럼 사용된다.
export default [
'Academy Color Encoding System (ACES)',
'Adobe RGB',
'Adobe Wide Gamut RGB',
'British Standard Colour (BS)',
'CIE 1931 XYZ',
'CIELAB',
'CIELUV',
'CIEUVW',
'CMY',
'CMYK',
'DCI-P3',
'Display-P3',
'Federal Standard 595C',
'HKS',
'HSL',
'HSLA',
'HSLuv',
'HSV',
'HWB',
'LCh',
'LMS',
'Munsell Color System',
'Natural Color System (NSC)',
'Pantone Matching System (PMS)',
'ProPhoto RGB Color Space',
'RAL',
'RG',
'RGBA',
'RGK',
'Rec. 2020',
'Rec. 2100',
'Rec. 601',
'Rec. 709',
'Uniform Color Spaces (UCSs)',
'YDbDr',
'YIQ',
'YPbPr',
'sRGB',
'sYCC',
'scRGB',
'xvYCC',
];
728x90
'기록' 카테고리의 다른 글
리눅스 gedit 문법 하이라이트 asm-intel.lang 설정 (0) | 2024.06.09 |
---|---|
Old Linux : 우분투 7.04 Feisty Fawn VirtualBox7 부팅 안될 때 (0) | 2024.06.08 |
nginx : 도커 이미지 기본 forwarding (0) | 2024.04.04 |
VS Code React, Next 에서 double quotes 사용하기 (0) | 2024.03.26 |
Kotlin: resilience4j circuit breaker fallback (0) | 2024.03.15 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib
TAG
- Rest
- WebMvc
- jsp
- Security
- Angular
- crud
- hibernate
- 외부파일
- 매핑
- 설정하기
- one-to-many
- 자바
- Spring
- form
- Many-To-Many
- 상속
- MYSQL
- Validation
- login
- 설정
- XML
- spring boot
- RestTemplate
- 하이버네이트
- 스프링부트
- mapping
- 스프링
- 로그인
- Spring Security
- one-to-one
250x250