prefer-typed-mapping-get
Read named fields from typed records instead of schema-free mappings.
Why
A get call on an Any/object-valued mapping or unchecked decoded JSON does not declare the field's type or distinguish a misspelled field from missing data. A default can conceal that gap.
Fix
Validate external data into a named Pydantic model before reading its attributes. For trusted internal records, declare a TypedDict or another precise record. Preserve legitimate get calls on typed mappings, optional TypedDict fields and validated normalization callbacks.
Examples
# packageimport json
def parse(text: str) -> dict[str, object]: return json.loads(text)from .parser import parse
def name(text: str): return parse(text).get("name")# packagefrom pydantic import BaseModel
class State(BaseModel): labels: dict[str, str]
def parse(text: str) -> State: return State.model_validate_json(text)from .parser import parse
def name(text: str): return parse(text).labels.get("name")def service_name(state: dict[str, object]): return state.get("name")from typing import TypedDict
class State(TypedDict): name: str
def service_name(state: State) -> str | None: return state.get("name")import json
def name(text: str): state = json.loads(text) return state.get("name")from pydantic import BaseModel
class State(BaseModel): name: str
def name(text: str) -> str: return State.model_validate_json(text).name