# `TypeMap` > A typesafe store keyed by types and containing different types of values. It provides functionality similar to AnyMap, but is more flexible because it allows for key-value pairs, rather than enforcing that keys and values are the same type. Key-value associations are defined through the `Key` trait, which uses an associated type parameter and trait coherence rules to enforce the invariants of `TypeMap`. ## Example ```rust #[deriving(Show, PartialEq)] struct KeyType; #[deriving(Show, PartialEq)] struct Value(i32); impl Key for KeyType { type Value = Value; } #[test] fn test_pairing() { let mut map = TypeMap::new(); map.insert::(Value(12)); assert_eq!(*map.find::().unwrap(), Value(12); } ```