Read the notes and the slides for an overview of semantic analysis.
Read these slides.
Read Chapter 6, which presents an overview of type checking, nicely organized: symbol table environment, type checking for expressions, functions, and then, for programs.
Study the slides on type systems and what to check for when building intermediate representations for various language constructs.
Read slides 2 through 14 and use them as a review or supplement to the above readings. Slides 15 through 31 give examples of type inference for the languages Prolog, Java, and Python.
These lectures correspond to the notes and are optional. They may be helpful in understanding some of the notes.
Study the very interesting presentation on type checking by proofs.
Read slides 1 through 8. The slides are somewhat formal and present a "type calculus." Use these slides to add to your understanding of types.
This video corresponds to these notes and is optional. If it adds to the notes and helps you, watch it.
Study the application of the type proof system (introduced above) to the detection of type errors.
Study slides 8 through 19. The slides supplement the readings above with type examples. A binding is a substitution of a type expression for a type variable.