Sistem jenis

Penjenisan statik

Pemeriksaan jenis dilakukan semasa pengkompilan seperti yang digunakan dalam C dan C++.
Contoh dalam C
int angka = 1; //pemboleh ubah angka diisytiharkan sebagai berjenis int, iaitu integer

Penjenisan dinamik

Dalam penjenisan dinamik, sesuatu pemboleh ubah tidak semestinya kekal sebagai jenis yang ia mula-mula diisytiharkan, sebaliknya boleh bertukar-tukar sedang atur cara dijalankan. Ini kerana pemeriksaan jenis dilakukan semasa atur cara dijalankan oleh pelaksanaan bahasa berkenaan. Penjenisan sebegini biasanya diguna oleh bahasa-bahasa tafsiran seperti Python dan JavaScript.
Pelaksanaan bahasa berjenis dinamik secara umum mengkaitkan objek-objek masa jalanan dengan "tag" yang mengandungi maklumat jenis bagi objek-objek tersebut. Pengelasan masa jalanan ini kemudian diguna untuk melaksanakan pemeriksaan jenis dan menempatkan fungsi-fungsi banyak takrifan (overload function), tapi juga membolehkan penggunaan merata bagi serahan dinamik, ikatan lewat serta ungkapan serupa yang menjadi rumit lagi tidak cekap terutamanya dalam bahasa yang berjenis statik, di mana jenis varian atau ciri sepertinya perlu diguna.
Contoh penjenisan dinamik dalam Python:

angka = 1 #diisytiharkan sebagai integer
angka = "Tukar kepada rentetan" #ditukar secara dinamik menjadi rentetan

Gabungan penjenisan dinamik dan statik

Adanya penjenisan statik dalam sesebuah bahasa pengaturcaraan tidak semestinya bermaksud tiada langsung mekanisme penjenisan dinamik. Sebagai contoh, Java dan beberapa bahasa yang kononnya dijeniskan secara statik menyokong downcasting di samping pengendalian jenis lain yang bergantung kepada pemeriksaan ketika jalanan, suatu bentuk penjenisan dinamik.

Penjenisan kuat dan lemah: Takrifan Liskov

Pada 1974, Liskov dan Zilles memerihalkan bahasa berjenis kuat sebagai "bila saja sesuatu objek dihulurkan daripada fungsi pemanggil kepada fungsi yang dipanggil, jenisnya mesti serasi dengan jenis yang diisytiharkan dalam fungsi yang dipanggil." Jackson menulis, "Dalam bahasa berjenis kuat, setiap kawasan data akan mempunyai jenis tertentu dan setiap proses akan menyatakan kehendak komunikasinya dalam sebutan jenis-jenis ini."

Penjenisan kuat dan lemah

Sesebuah sistem jenis dikata menampilkan penjenisan kuat jika ia menyatakan satu atau lebih kekangan terhadap bagaimana operasi yang melibatkan nilai-nilai dengan jenis data yang berbeza boleh dicampuradukkan. Bahasa komputer yang melaksanakan pejenisan kuat akan mengelakkan pengendalian dilakukan dengan jayanya walaupun jenis argumen yang diberi adalah salah.
Penjenisan lemah bermakna bahawa sesebuah bahasa menukar (atau memeran) jenis secara tersirat apabila diguna. Lihat contoh berikut:
var x := 5;    // (1)  (x ialah integer)
var y := "37"; // (2)  (y ialah rentetan)
x + y;         // (3)  (?)
Dalam bahasa yang penjenisannya lemah, hasil operasi ini bergantung kepada peraturan bahasa tertentu. Visual Basic akan menukar rentetan "37" kepada angka 37, membuat penambahan, dan menghasilkan angka 42. JavaScript akan menukar angka 5 kepada rentetan "5", membuat penjeraitan rentetan, lalu menghasilkan rentetan "537". Dalam JavaScript, penukaran kepada rentetan dipakai tanpa mengira turutan kendalian (operand) (misalnya, y + x menjadi "375") sementara dalam AppleScript, kendalian paling kiri yang akan menentukan jenis hasil, supaya x + y hasilnya angka 42 tetapi y + x ialah rentetan "375".

Sistem jenis tak wajib

Gilad Bracha mengetuai pengusulan untuk membuatkan sistem jenis boleh dipilih tanpa bergantung kepada bahasa yang digunakan; di mana sistem jenis ialah modul yang boleh di "pasang" pada sesuatu bahasa jika perlu. Beliau percaya bahawa ini mendatangkan faedah kerana apa yang digelarnya sistem jenis wajib membuatkan bahasa tertentu menjadi kurang ekspresif dan kod menjadi lebih rapuh. Keperluan supaya jenis tidak memberi kesan ke atas semantik bahasa adalah sukar untuk dicapai: contohnya, warisan berasaskan kelas menjadi mustahil.