LoginSignup
0
1

More than 3 years have passed since last update.

【TypeScript】TypeScriptの型2

Posted at

TypeScriptの型のまとめ

  • Union型
  • Literal型
  • Alias型/Custom型
  • unknown型
  • never型

ここで取り上げていないTypeScriptの基本的な型については、リンク先を参考にしてください(^o^)

TypeScriptの型

説明
Union型 複数の型を指定できる
Literal型 値そのものを厳密に指定する
Alias型/Custom型 型の名前をつける
unknown型 最終的にどの型になるのかわからない事を表す
never型 絶対に値を返さない時に使う

Union型

  • |で複数の型を指定できます
//union型を使わない場合
function combine(input1: number, input2: number) {
  const result = input1 + input2;
    return result;
}

const combineAges = combine(30,26);
console.log(combineAges);

// number以外を引数に渡したので、errになる
const combineNames = combine('Max','Alice');
console.log(combineNames);  
  • ここで、union型で複数の型を指定できるように修正します

function combine(input1: number | string, input2: number | string) { //numberか、stringを受け取れる

 let result;

    if (typeof input1 === 'number' && typeof  input2 === 'number' ){   //runtime上でデータ型を確認する必要
    result = input1 + input2;
    } else {
    result = input1.toString() + input2.toString();  //明示的に文字列に変換して結合
    }

  return result;
}

Literal型

  • 値そのものを厳密に指定する型です
//ex:文字列か数値を受け取って出力する関数

const number2 = 2.8; 

function combine(
input1: number | string, 
input2: number | string, 
resultConversion: string  //returnで返す型を指定できる
) {
    let result;
    if (typeof input1 === 'number' && typeof  input2 === 'number'  ) ||  resultConversion === 'as-number' {  
      result = + input1 +  + input2; //数値として結合
     } else {
      result = input1.toString() + input2.toString();  
   }
   return result;
}

const combineAges = combine(30,26 , 'as-number'); 

const combineAges = combine( '30', '26' , 'as-number'); //引数は文字列であるが、結果は数値で受け取りたい

const combineNames = combine('Max','Alice' ,'as-text'); 
  • 🌟Literal 型を使えば、resultConversion: に特定の string しか入れられないように指定できます
function combine(
   input1: number | string, 
   input2: number | string, 
   resultConversion:  'as-number' | 'as-text'   //returnで返す型を指定できる
) {
//...略
}
  • こうすると、関数内で、指定したstring以外を受け取れず、 resultConversion === 'as-nekoooooo'など指定したstring以外の場合、引数として渡せないようになります~(^o^)✨

Alias型/Custom型

  • 🌟型の定義を再利用し、型の名前をつけることで、型の意味を明文化できます
    • 必ず同じ型を指定できるメリットがあります
    • なんども同じことを書く場合に便利です
type  Combination = number | string; 
type  CombinationDescription = 'as-number' | 'as-text' ; 

//Alias型を使わない関数

function combine(
input1: number | string, 
input2: number | string, 
resultConversion:  'as-number' | 'as-text'   //returnで返す型を指定できる
) {
//...略
}

//Alias型を使った関数

function combine(
input1: Combination , 
input2: Combination , 
resultConversion:  CombinationDescription ,  //returnで返す型を指定できる
) {
//...略
}
  • Object 型に対しても型エイリアスを使えます
type User = { name: string; age: number };

function greet(user: User) {
  console.log('Hello! I am ' + user.name);
}

function isOlder(user: User, checkAge: number) {
  return checkAge > user.age;
}

unknown型

  • 最終的にどの型になるのかわからないときに使う型です
let userInput: unknown;
let userName: string;

userInput = 5;
userInput = 'Max';

userName =userInput; //エラー:stringであることが保証されていない
  • 🌟unknown型を型が指定された変数に代入する時は、型チェックが必要になります
    • 🌟少しでも型が予測できるなら、union型を使いましょう
if( type0f userInput === 'string' ){
    userName =userInput;
}

never型

  • 🌟絶対に、値を返さない時に使う関数の戻り値の型。
    • コード作成者の意図を伝えられるというメリットがあります
    • エラーを投げる、無限ループなどで使います
function generateError (message: string ,code:number) :void{
  throw{ message:message, errorCode:code} ;//ここでスクリプトがクラッシュする
}

const result = generateError('エラーが発生しました',500);
console.log(result);
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1