Template literal types describe strings that are assembled from smaller sets of names.

Template Event Names

event_names.ts
type Entity = "user" | "order";
type Action = "created" | "updated";
type EventName = `${Entity}:${Action}`;

function publish(eventName: EventName): string {
    return `publish ${eventName}`;
}

const entity: Entity = ;
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 = ;
const action: Action = "created";
const eventName: EventName = `${entity}:${action}`;

console.log(publish(eventName));
template literal type A type such as `` `${Entity}:${Action}` `` keeps event names aligned with the allowed pieces.