Type systems are an integral component of many programming languages and an important technique in verification. This course provides an introduction to type systems. It discusses basic concepts, advantages and limitations of type systems.