Template Literal Types
Template Event Names
Template literal types describe strings that are assembled from smaller sets of names.
template literal type
A type such as `` `${Entity}:${Action}` `` keeps event names aligned with the allowed pieces.
Template Event Names
event_names.ts
Replay: real traced execution (multi-file project)
type Entity = "user" | "order";
type Action = "created" | "updated";
type EventName = `${Entity}:${Action}`;
function publish(eventName: EventName): string {
return `publish ${eventName}`;
}
const entity: Entity = "user";
const action: Action = "created";
const eventName: EventName = `${entity}:${action}`;
console.log(publish(eventName));
type Entity = "user" | "order";
type Action = "created" | "updated";
type EventName = `${Entity}:${Action}`;
function publish(eventName: EventName): string {
return `publish ${eventName}`;
}
const entity: Entity = "order";
const action: Action = "created";
const eventName: EventName = `${entity}:${action}`;
console.log(publish(eventName));
entity ← user, action ← created, eventName ← user:created
6 return `publish ${eventName}`;7}89const entity→ user: Entity = "user"; //@entity="order"10const action→ created: Action = "created";11const eventName→ user:created: EventName = `${entityuser}:${actioncreated}`;1213console.log(publish(eventNameuser:created));function publish(eventName: EventName): string
2type Action = "created" | "updated";3type EventName = `${Entity}:${Action}`;45function publish(eventNameuser:created: EventName): string {6 return `publish ${eventNameuser:created}`;7}console.log(publish(eventName));
10const action: Action = "created";11const eventName: EventName = `${entity}:${action}`;1213console.log(publish(eventNameuser:created));outputpublish user:created
entity ← order, action ← created, eventName ← order:created
6 return `publish ${eventName}`;7}89const entity→ order: Entity = "order";10const action→ created: Action = "created";11const eventName→ order:created: EventName = `${entityorder}:${actioncreated}`;1213console.log(publish(eventNameorder:created));function publish(eventName: EventName): string
2type Action = "created" | "updated";3type EventName = `${Entity}:${Action}`;45function publish(eventNameorder:created: EventName): string {6 return `publish ${eventNameorder:created}`;7}console.log(publish(eventName));
10const action: Action = "created";11const eventName: EventName = `${entity}:${action}`;1213console.log(publish(eventNameorder:created));outputpublish order:created