এলিক্সির একটি ডাইনামিকভাবে টাইপড ভাষা, অর্থাৎ এটি কম্পাইল-টাইম টাইপ চেক দেয় না। তবুও টাইপ স্পেসিফিকেশন কাজে লাগতে পারে, কারণ এগুলো:
ফাংশন ডিফিনিশনের ঠিক আগে @spec মডিউল অ্যাট্রিবিউট ব্যবহার করে একটি ফাংশনে টাইপ স্পেসিফিকেশন যোগ করা যায়।
@spec longer_than?(String.t(), non_neg_integer()) :: boolean()
def longer_than?(string, length), do: String.length(string) > length
টাইপস্পেকে যেসব এক্সপ্রেশন ব্যবহার করা যায়:
মৌলিক টাইপ, যেমন:
boolean()integer(), non_neg_integer(), pos_integer(), float()
list()map()any()একাধিক টাইপের ইউনিয়ন:
integer() | list(integer())
প্যারামিটারাইজড টাইপ:
list(integer()) - ইন্টিজারের একটি অ্যারে%{age: integer()} - :age কী (key)-এর নিচে একটি ইন্টিজার মান সহ ম্যাপরিমোট টাইপ (কোনো মডিউলে ডিফাইন করা), যেমন:
লিটারাল, যেমন:
%{} - একটি খালি ম্যাপ[] - একটি খালি অ্যারে (তবে [any()] একটি অ-খালি অ্যারে):ok - একটি অ্যাটম লিটারালবিল্ট-ইন বিশেষায়িত টাইপ, যেমন:
char() - 0..0x10FFFF রেঞ্জের একটি ইন্টিজারcharlist() - ক্যারেক্টারের একটি অ্যারেkeyword() - দুই এলিমেন্টের টাপলের একটি অ্যারে, যেখানে প্রথম এলিমেন্টটি একটি অ্যাটমকাস্টম টাইপ
সব টাইপের সম্পূর্ণ তালিকা অফিশিয়াল ডকুমেন্টেশনের "Typespecs" অংশে পাওয়া যাবে।
টাইপস্পেকে আর্গুমেন্টের নামও দেওয়া যায়, যা একই টাইপের একাধিক আর্গুমেন্ট আলাদা করতে কাজে লাগে।
@spec to_hex({hue :: integer, saturation :: integer, lightness :: integer}) :: String.t()
তিনটি মডিউল অ্যাট্রিবিউটের যেকোনো একটি ব্যবহার করে কাস্টম টাইপ ডিফাইন করা যায়:
@type - একটি পাবলিক টাইপ ডিফাইন করে@typep - একটি প্রাইভেট টাইপ ডিফাইন করে@opaque - একটি পাবলিক টাইপ ডিফাইন করে যার গঠন প্রাইভেট@type color :: {hue :: integer, saturation :: integer, lightness :: integer}
@spec to_hex(color()) :: String.t()
String.t() বনাম binary() বনাম string()
String.t() হলো এলিক্সির স্ট্রিংয়ের জন্য ব্যবহার করার সঠিক টাইপ, যেগুলো UTF-8 এনকোড করা বাইনারি। কারিগরি দিক থেকে String.t() আসলে একটি binary() হিসেবে ডিফাইন করা, আর অ্যানালাইসিস টুলের কাছে এই দুটি টাইপ সমতুল্য। তবে এলিক্সির স্ট্রিং নিয়ে কাজ করে এমন ফাংশন ডকুমেন্ট করার সময় String.t() উদ্দেশ্য বেশি স্পষ্ট করে।
অন্যদিকে string() একটি ভিন্ন টাইপ। এটি একটি Erlang স্ট্রিং, যা এলিক্সিরে charlist নামে পরিচিত। টাইপস্পেকে string() টাইপ এড়িয়ে চলা উচিত, বদলে charlist() ব্যবহার করা উচিত।
Dialyzer হলো একটি স্ট্যাটিক অ্যানালাইসিস টুল, যা Erlang ও Elixir কোডে টাইপ এররের মতো সমস্যা ধরতে পারে। একটি Elixir প্রজেক্টে Dialyzer ব্যবহারের সবচেয়ে সহজ উপায় হলো Dialyxir।