Events
import { Events, Event } from '@hurum/core'Events(prefix, definitions)
섹션 제목: “Events(prefix, definitions)”네임스페이스가 지정된 Event 생성자 그룹을 만들어요.
시그니처
섹션 제목: “시그니처”function Events<TPrefix extends string, TDefs extends Record<string, EventDefinition<unknown>>>( prefix: TPrefix, events: TDefs,): EventCreatorMap<TPrefix, TDefs>매개변수
섹션 제목: “매개변수”| 매개변수 | 타입 | 설명 |
|---|---|---|
prefix | string | 네임스페이스 접두사. Event 타입 문자열의 일부가 돼요 (예: 'Purchase'). |
events | Record<string, EventDefinition<T>> | Event 이름에서 Event<T>() 마커로의 맵. |
반환값
섹션 제목: “반환값”키가 events와 일치하는 객체. 각 값은 EventCreator예요.
const PurchaseEvent = Events('Purchase', { saved: Event<{ purchase: Purchase }>(), saveFailed: Event<{ error: Error }>(),})
// Create event instancesPurchaseEvent.saved({ purchase })// -> { type: 'Purchase/saved', purchase: ... }
// Access the type literalPurchaseEvent.saved.type// -> 'Purchase/saved' (string literal type, not string)Event<T>()
섹션 제목: “Event<T>()”Event의 페이로드 형태를 정의하는 타입 마커예요. Events() 내부에서만 사용돼요.
시그니처
섹션 제목: “시그니처”function Event<T = {}>(): EventDefinition<T>타입 매개변수
섹션 제목: “타입 매개변수”| 매개변수 | 설명 |
|---|---|
T | 이 Event의 페이로드 타입. 기본값은 {} (페이로드 없음). |
반환값
섹션 제목: “반환값”EventDefinition<T> 마커 객체. 런타임 동작은 없으며, 타입 추론을 위해서만 존재해요.
const CartEvent = Events('Cart', { itemAdded: Event<{ item: CartItem }>(), cleared: Event(), // no payload})EventCreator<TType, TPayload>
섹션 제목: “EventCreator<TType, TPayload>”Events()가 생성하는 각 Event 생성자의 타입이에요. 호출 가능한 함수이면서 .type 속성을 가져요.
| 속성 | 타입 | 설명 |
|---|---|---|
type | TType | 문자열 리터럴 타입 (예: 'Purchase/saved'). |
호출 시그니처
섹션 제목: “호출 시그니처”(payload: TPayload) => EventInstance<TType, TPayload>생성자를 호출하면 EventInstance를 생성해요 — type과 페이로드 필드가 스프레드된 일반 객체예요.
const event = PurchaseEvent.saved({ purchase: myPurchase })// event.type -> 'Purchase/saved'// event.purchase -> myPurchaseEventInstance<TType, TPayload>
섹션 제목: “EventInstance<TType, TPayload>”런타임 Event 객체예요. type 판별 필드와 페이로드 속성을 포함하는 일반 객체예요.
type EventInstance<TType extends string, TPayload> = { readonly type: TType} & TPayloadEvent는 불변의 사실 기록이에요. Store의 상태를 변경하는 유일한 메커니즘이에요.
isEventCreator(value)
섹션 제목: “isEventCreator(value)”값이 EventCreator인지 확인하는 타입 가드예요.
시그니처
섹션 제목: “시그니처”function isEventCreator(value: unknown): value is EventCreator참고사항
섹션 제목: “참고사항”- Event 타입은
'{prefix}/{name}'형식을 따라요 (예:'Purchase/saved'). - Event 이름은 과거형으로 지정하세요. 무엇이 일어나야 하는지가 아닌, 무엇이 일어났는지를 기록해요.
- Event는 런타임 의존성이 없어요. Command, Intent, Store보다 먼저 정의하세요.
.type속성은 문자열 리터럴 타입을 유지해요. Hurum 내부에서 디스패치에 사용돼요. Store.on()핸들러에서는 계산된 속성 키 대신 네임스페이스 형식.on(MyEvent, { saved: handler })또는 개별 Event 형식.on(MyEvent.saved, handler)을 사용하세요.