Type inference in Rust works by the compiler analyzing the context of a variable to determine its specific type without requiring explicit annotations. When you use let to declare a variable, the compiler looks at the value assigned or how the variable is used to deduce the type, similar to how it handles generic types in functions like largest or lifetimes in ch10-03-lifetime-syntax.md.
let guess = String::new(); // Compiler infers 'guess' is a String
let number = 5; // Compiler infers 'number' is an i32
If the compiler cannot determine the type from the context, you must explicitly annotate it.