"Types and Programming Languages" by Benjamin Pierce is an excellent textbook (and approachable, even to people without formal CS education) that covers type inference and introduces a lot of the nomenclature/formalism gradually.
I'm trying to go through TAPL, and maybe it's me, but I find its extremely terse and lacks a lot of examples I would find useful
I don't know if it will be useful to you, but I worked up dependency-free parsers/type checkers in Rust for the "languages" defined in most of the chapters (at least the ones I cared about) https://github.com/lazear/types-and-programming-languages