from typing import NewType
UserId = NewType("UserId", int)
PostId = NewType("PostId", int)
def delete_user(uid: UserId) -> None: ...
def delete_post(pid: PostId) -> None: ...
u: UserId = UserId(42)
p: PostId = PostId(99)
delete_user(u) # ✓
# delete_user(p) # mypy error: PostId is not assignable to UserId
# delete_user(42) # mypy error: int is not assignable to UserId
# At runtime, UserId IS just int — no overhead.
assert UserId(1) == 1
Create a free account and build your private vault. Share publicly whenever you want.