1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TypeScript 型一覧

Posted at

はじめに

今回初めてTypeScriptでNext.jsを利用したいと考え、まずは型定義でしっかりとハマることがあったので、頭の整理のためにまとめてみたいと思います。

  • object型
    const person: {
    	name: string;
    	age: number
    } = {
    	name: 'taro',
    	age: 20,
    }
    

  • array型

    //すべての要素に対して、ひとつの型のみを許可する型指定
    let favoriteActiveties: string[] = ['basketball', 'soccer'];
    //変数に対して変数であるというだけの型指定。要素に対してはどのような型でも許容する
    let favoriteWords: any[] = ['love', 0, 'family'];
    //tuple型: 変数に対して配列であり、配列の長さ、配列の要素の指定をする。配列メソッドのpushによる配列操作に対する制限はできない
    let favoriteWords: [string,number,string] = ['love', 0, 'family'];
    

  • enum型
      enum 大文字から始める利用したいenum名 {
      	利用したい命名1,
      	利用したい命名2,
      	...
      }
      enum Role {
          engineer,
          manager,
          dad
      }
      
      const person = {
          name: 'taro',
          age: 20,
          hobbies: ['fashion','basketball'],
          role: Role.engineer
      }
      
      if(person.role===Role.engineer){
          console.log(Role)
      }
    

  • any型(非推奨: 型定義として汎用性が高すぎる)

    const example: any[] = ['name','age',10,'gender'];
    

  • union型

    変数に対して、いくつかの型を許容するときに利用できる

    function conbine(input1: number | string, input2: number | string) {
        let result
        if (typeof input1 === 'number' && typeof input2 === 'number') {
            result = input1 + input2
        } else {
            result = input1.toString() + input2.toString();
        }
        return result
    }
    const conbineAges = conbine(1, 50)
    const conbineName = conbine('tanaka', 'taro')
    console.log(conbineAges);
    console.log(conbineName);
    

  • type型 (型エイリアス/ カスタム型)

    型を変数に格納するようなこと。

    オブジェクトの型定義など記述が冗長になるものを、エイリアス型で記述することで型指定の記述を短くすることができる

    type Combinable = number | string;
    //このように記述することで、union型の記述をしなくても型定義にCombinableと指定すればOK
    
    

  • void型
    関数の戻り値がなにもないということを意味する型定義である
    returnでなにも返ってこないときに利用する。通常明示的に示す以外には特別利用することはない


  • function型
    関数を格納する変数名を宣言するときに利用する

        type Add = (a: number, b: number) => number
        let combineVals: Add;
        //上の記述では指定された関数型が入る変数であると宣言している
        combineVals = (num1: number, num2: number) => {
          let calcNum = num1 * num2
          let plusNum = num1 + num2
          const result = calcNum + plusNum
          return result
        }
        //typeにそった関数を実装する
        console.log(combineVals(3, 5))
    
    • コールバック関数に対する型定義

      function addAndHundle(num1: number, num2: number, cd:(num: number) => void): void {
          const result=num1+num2;
          cd(result);
      }
      addAndHundle(4,5,(result)=>{
          console.log(result)
      })
      

  • unknown型

    let userInput: unknown
    // unknownはなにが入ってくるかわからないという意味
    let userName: string
    userName = userInput;
    // これはエラーになる
    // userInputはなにが入ってくるかわからないということが明示されている
    // userNameはstringであるということが担保されている状況でないと代入することができない
    // この場合でエラーを発生させない方法は
    if (typeof userInput === 'string') {
        userName = userInput
    }
    

  • never型

    void型と異なる点は決して戻り値が発生することがない場合に利用する

    このようなスクリプトをクラッシュするような関数に関しては絶対に戻り値が発生することはないため、neverを利用すると明示的にスクリプトをクラッシュさせるのだと伝えられる

    function generateError(message: string, code: number):never{
    	throw {message: message, code: code}
    }
    

まとめ

今回初めてTypeScriptを利用して、型を定義することによる開発のしやすさを感じることもありました。しかし、ReactやNext.js特有の型定義によってハマってしまったこともありました。
TypeScriptの優位性を本質的な利用ができるように、今後も取り組んでいきたいと思いました。

1
0
1

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?