Skip to main content

TypedDict

Use TypedDict replace pydantic definitions.

Why?

from pydantic import BaseModel


class User(BaseModel):
    name: str
    age: int = Field(default=0, ge=0)
    email: Optional[str]


user: User = {"name": "John", "age": 30}  # Type check, error!
print(repr(user))

In index.py or other framework, maybe you write the following code. And then got an type check error in Annotated[Message, ...], because the type of {"message": "..."} is not Message.

class Message(BaseModel):
    message: str


@routes.http.post("/user")
async def create_user(
    ...
) -> Annotated[Message, JSONResponse[200, {}, Message]]:
    ...
    return {"message": "Created successfully!"}

Usage

Use Annotated to provide extra information to pydantic.Field. Other than that, everything conforms to the general usage of TypedDict. Using to_pydantic will create a semantically equivalent pydantic model. You can use it in frameworks like index.py / fastapi / xpresso.

from typing_extensions import Annotated, NotRequired, TypedDict

import typeddict
from typeddict import Extra, Metadata


class User(TypedDict):
    name: str
    age: Annotated[int, Metadata(default=0), Extra(ge=0)]
    email: NotRequired[Annotated[str, Extra(min_length=5, max_length=100)]]


class Book(TypedDict):
    author: NotRequired[User]


user: User = {"name": "John", "age": 30}  # Type check, pass!
print(repr(user))

# Then use it in fastapi / index.py or other frameworks
UserModel = typeddict.to_pydantic(User)
print(repr(UserModel.__signature__))
print(repr(UserModel.parse_obj(user)))

book: Book = {"author": user}  # Type check, pass!
print(repr(book))

# Then use it in fastapi / index.py or other frameworks
BookModel = typeddict.to_pydantic(Book)
print(repr(BookModel.__signature__))
print(repr(BookModel.parse_obj(book)))

cast

Sometimes you may not need a pydantic model, you can directly use typeddict to parse the data.

import typeddict


class User(TypedDict):
    name: str
    age: Annotated[int, Metadata(default=0), Extra(ge=0)]
    email: NotRequired[Annotated[str, Extra(min_length=5, max_length=100)]]


user = typeddict.cast(User, {"name": "John", "age": 30, "unused-info": "....."})
print(repr(user))

Metadata

Release files for typeddict 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for typeddict 0.3.0
File Size Uploaded
typeddict-0.3.0.tar.gz 7.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for typeddict 0.3.0
File Interpreter ABI Platform
typeddict-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 16.4 kB

Release files / typeddict-0.3.0.tar.gz

Download URL typeddict-0.3.0.tar.gz
Size 7.9 kB
Tags Source
SHA-256 checksum
How to use checksums
41c10cf137a1df4d287aa147b1719f97ee465e46ec900ad483466c7c1b0692ed
BLAKE2b-256 checksum
How to use checksums
ed92f941620967dd4ae6db22b303c34d06f19a258f01fa6b1b513f6e62f82f8e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.3.2 CPython/3.7.15 Linux/5.15.0-1030-azure

Release files / typeddict-0.3.0-py3-none-any.whl

Download URL typeddict-0.3.0-py3-none-any.whl
Size 8.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e979ebf7455a7e95b82479df1e2eba00699e2566a68fef92cb5c2cebca663f27
BLAKE2b-256 checksum
How to use checksums
2f10f5de15669213240596a80d691439ca94dc49223abb9b7b52f1a3a43c5a18
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.3.2 CPython/3.7.15 Linux/5.15.0-1030-azure

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page