Template
Build template literal strings
Build string literal types from parts.
Quick Example
import typemap_extensions as tm
from typing import Literal
from typemap import eval_typing
type Resource = Literal["users", "posts", "comments"]
result = eval_typing(tm.Template["api/v1/", Resource])
# Returns: Literal["api/v1/users"] | Literal["api/v1/posts"] | Literal["api/v1/comments"]Signature
class Template[*Parts]:
"""Template literal string builder."""What It Does
Template concatenates string literal types at compile time to create new string literal types.
Usage
Simple Concatenation
type Prefix = Literal["api"]
result = eval_typing(tm.Template[Prefix, "/v1"])
# Returns: Literal["api/v1"]Multiple Parts
type Version = Literal["v1", "v2"]
type Resource = Literal["users", "posts"]
result = eval_typing(tm.Template["api/", Version, "/", Resource])
# Returns: Literal["api/v1/users"] | Literal["api/v1/posts"] |
# Literal["api/v2/users"] | Literal["api/v2/posts"]Dynamic Paths
type HTTPMethod = Literal["get", "post", "put", "delete"]
# Generate all possible routes
type Route = tm.Template[HTTPMethod, "-", Literal["user"]]
# Literal["get-user"] | Literal["post-user"] | ...Use Cases
- API routes - Build type-safe routes
- Event names - Create event type unions
- Naming conventions - Generate related names
TypeScript Comparison
// TypeScript
type Route = `api/${"v1" | "v2"}/${"users" | "posts"}`;
// typemap
Route = eval_typing(tm.Template[
Literal["api/"],
Literal["v1" | "v2"],
Literal["/"],
Literal["users" | "posts"]
])Note: All parts must be string literal types for Template to work.