
print("=" * 62)
print("SECTION 9 · pyrightconfig.json")
print("=" * 62)
config = {
"include": ["src"],
"exclude": ["**/__pycache__"],
"pythonVersion": "3.11",
"typeCheckingMode": "strict",
"reportMissingImports": "error",
"reportMissingTypeStubs": "warning",
"reportUnknownVariableType": "warning",
"reportUnknownMemberType": "warning",
"reportUnnecessaryTypeIgnoreComment": "warning",
}
cfg_path = os.path.join(WORK, "pyrightconfig.json")
with open(cfg_path, "w") as f:
json.dump(config, f, indent=2)
print(f"Written: {cfg_path}")
print(json.dumps(config, indent=2))
print()
print("=" * 62)
print("SECTION 10 · Self, TypeAlias, NewType")
print("=" * 62)
write("s10_modern_types.py", """
from typing import Self, TypeAlias, NewType
class Query:
def __init__(self) -> None:
self._filters: list[str] = []
def where(self, cond: str) -> Self:
self._filters.append(cond)
return self
def build(self) -> str:
return " AND ".join(self._filters)
class AdvancedQuery(Query):
def order_by(self, col: str) -> Self:
return self
q = AdvancedQuery().where("age > 18").order_by("name")
reveal_type(q)
Vector: TypeAlias = list[float]
Matrix: TypeAlias = list[Vector]
def dot(a: Vector, b: Vector) -> float:
return sum(x * y for x, y in zip(a, b))
v1: Vector = [1.0, 2.0, 3.0]
v2: Vector = [4.0, 5.0, 6.0]
dot(v1, v2)
dot(v1, [1, 2, 3])
UserId = NewType("UserId", int)
OrderId = NewType("OrderId", int)
def get_user(uid: UserId) -> str:
return f"user_{uid}"
uid = UserId(42)
oid = OrderId(99)
get_user(uid)
get_user(oid)
get_user(42)
""")
print("→ s10_modern_types.py:")
run_pyright("s10_modern_types.py")
print("=" * 62)
print("SECTION 11 · reveal_type() & type: ignore")
print("=" * 62)
write("s11_reveal_ignore.py", """
from typing import Any
values = [1, "two", 3.0]
reveal_type(values)
def mystery(x: Any) -> Any:
return x
r = mystery(42)
reveal_type(r)
bad: int = "oops"
bad2: int = "also bad" # type: ignore[assignment]
""")
print("→ s11_reveal_ignore.py:")
run_pyright("s11_reveal_ignore.py")
print("=" * 62)
print("TUTORIAL COMPLETE")
print("=" * 62)
print("""
Topics covered
──────────────
1 Basic annotations & inference
2 Optional / Union / PEP 604 syntax
3 Type narrowing (isinstance, guards, TypeGuard, match)
4 Generics — TypeVar, Generic, ParamSpec
5 Protocols & structural subtyping
6 TypedDict, dataclasses, NamedTuple
7 Literal, Final, @overload
8 Strict mode
9 pyrightconfig.json
10 Self, TypeAlias, NewType
11 reveal_type() & type: ignore
All source files written to: /tmp/pyright_tutorial/
""")






