This package intends to provide run-time type checking for functions annotated
with argument type hints (standard library
typing module in Python 3.5, or
backports.typing package in Python 3.3 / 3.4).
from typing import Sequence, List from typo import type_check @type_check def f(x: int, s: Sequence[int]) -> List[int]: ...
@type_check decorator ensures that the values passed to annotated
arguments will have their types checked before the function is executed;
return value can be optionally checked as well.
If the value types are not consistent with the function signature, a
TypeError with a descriptive error message will be raised. For
instance, calling function
f from the example above with wrong
>>> f(1, (0, 2.2))
results in an exception being thrown:
TypeError: invalid item #1 of `s`: expected int, got float
Note: this is work-in-progress and not all
typing primitives are
supported; however all supported constructs should be covered by a
good number of tests.
Here's some of the supported type hints: simple types,
TypeVar (with support for constraints
and upper bounds).
What's not supported:
Generator (which we can't
inspect due to their laziness),
Callable (which we can't check
without calling it), forward references (which is possible to
support but requires more work), covariant and contravariant
type variables (this requires more thought but isn't likely
to be helpful in the runtime context).