普通の引数
引数にはプリミティブ型(boolean,number,stringなど)、クラス、インターフェイス、列挙型を指定するのが一般的です。
1 2 3 |
function hoge1(x :number) { console.log(x); } |
しかし、コードによっては、特定の値のみを指定したい場合があります。クラスやインターフェイス、列挙型などを引数にしても良いのですが、そこまで拘りたくない場合があります。
特定の数値のみ引数として許可した例
数値の[1][2][10]のみを引数として許可した例です。()
とパイプを使用しています。指定した値以外をコーディングした場合はコンパイルエラーになります。
1 2 3 4 5 6 7 8 |
function pipeNumber(i: (1 | 2 | 10)): void { console.log(i); } // pipeNumber(0); // compile error !!!! pipeNumber(1); pipeNumber(2); // pipeNumber(3); // compile error !!!! |
特定の値のみ引数として許可した例
次は特定の文字列のみ許可した例です。これも引数に指定されていない値を使おうとするとコンパイルエラーになります。
1 2 3 4 5 6 7 8 |
function pipeString(s: ('A' | 'B' | 'CD')): void { console.log(s); } pipeString('A'); pipeString('B'); pipeString('CD'); // pipeString('E'); // compile error !!!! |
type宣言で使い回せるように
引数に渡せる値を直接記載すると使い回しが面倒になる場合があります。そのような場合はtype
を使用し、型宣言を行い、それを引数の型に指定します。
1 2 3 4 5 6 7 8 9 |
type MODE = ("DEBUG" | "PRO"); function showMode(mode: MODE) { console.log(mode); } showMode("DEBUG"); showMode("PRO"); // showMode("debug"); // compile error; |
クラスを作らなくても良い
type
ではインターフェイスのように型宣言もすることができます。複雑な引数の場合はクラスやインターフェイスを使用するべきだと思いますが、クラス内でのみ使用する場合など使用範囲が狭い場合などにおすすめです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
type typeUser = { id: number, name: string }; function showUser(u: typeUser) { console.log(u.id); console.log(u.name); // console.log(u.hoge); // compile error } showUser({ id: 1, name: "user" }); // showUser({ id: 1, name: "user", dummy: "test" }); // compile error |