In de informatica definieert een typesysteem hoe een programmeertaal gegevens groepeert in verschillende gegevenstypen, en hoe deze typen gebruikt en gecombineerd kunnen worden.
Een type specificeert een verzameling waarden die bepaalde overeenkomsten hebben. Met elk type is een verzameling bewerkingen geassocieerd die op waarden van dat type toegepast kunnen (mogen) worden. Een van de belangrijkste verschillen tussen een high level-programmeertaal en een low level-programmeertaal is dat een low level-taal geen typesysteem heeft: zo'n taal kent alleen bytes en words.[1]