適格な式にはそれぞれ緻密な型があります。 Q には、以下の 2 つの基本型があります。
文字列、整数、実数、およびブール型は 対応するプリミティブ値、regexp は正規表現、オブジェクトはメタクラスの インスタンスを対象としています。
基本型に加えて、Q 言語は 3 フォームの 構造型 (タプル、コレクション、関数) をサポートします。
任意の型 α、β、…、ω の場合、α x β x … x ω 式は、 コンポーネント型 α、β、…、ω のタプルの型を示します。例えば、string x integer の型は、 最初のコンポーネントとしての文字列と 2 番目のコンポーネントとしての整数のペアとなります。
コレクションは、重複の可能性があるリストです。 任意の型 α の場合、α collection は、コレクションの型が α であることを示します。 例として、object collection や string collection などがあります。
任意の型 α および β の場合、α → β は、 型 α のパラメーターを取って、型 β の値を返す関数を示します。例えば、string → integer は、 文字列を取って整数を返す関数の型です。
この方式の型表記は複雑な型にも適宜対応しますが、 実際、現行の実装には、複雑さを制限するいくつかの制約があります。 具体的には、現行の実装では基本型、基本型のタプル、オブジェクト・コレクション、文字列コレクション がサポートされ、 さらに、これらの型のいずれかを取っていずれかを返す関数がサポートされています (戻りの型のタプルを除く)。 また、型 (object → string) x object collection → string collection (組み込み関数のマップ型)、(object → boolean) x object collection → object collection (組み込み関数のフィルター型) など、 他にもトラバースとソート用の型の特殊なサポートもあります。
より複雑な型の例を以下に示します。