添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Zenn
🗂

TypeScriptの型定義まとめ【Reactも対応】

2022/11/04 に公開

プログラムを始めて間もない時に以下のような体験をした人は少なくないのではないでしょうか。

静的型付け言語を始める → むずい。もう嫌 → 動的型付け言語サイコー!→ いや、やっぱ静的型付け言語大事だわ

少なくとも僕はこの一人でした。
加えてこんなことも思ってる人もいるのではないでしょうか。

静的型付け言語やりたいけど、業務で使う言語は動的型付け言語での開発がメイン。かといって今使ってない Java とかをガッツリやるのもなぁ。

なんて思ってたら TypeScript が誕生。歓喜。
よく使う言語を続けつつも静的型付けを取り入れることが可能になりました。

そんなこんなで最近は TypeScript の学習を始めましたのでアウトプットとして型の定義の方法まとめです。

並走で React の学習も進めているので通常の TypeScript の型定義と React 特有の型定義を本記事では取り扱っていければと思ってます。

それではよろしくお願いします。

MDN によると「プリミティブはオブジェクトでなく、メソッドを持たないデータのことです。」とのことです。

具体的には以下のような値になります。

  • 文字列(string)
  • 数値(number)
  • 数値で扱えない範囲の数値(bigint)
  • 真偽値(boolean)
  • null(null)
  • undefined(undefined)
  • シンボル(symbol)
  • 上記のプリミティブにはそれぞれ()内の型があり、TypeScript を使用することで型の異なる値は相互に代入ができなくなります。

    以下サンプルです。それぞれ型の一致する値は問題なく代入できて型の異なる値を代入するとエラーメッセージが出力されます。(エラーメッセージは vscode の自動補完で確認できます)

    let str: string = "hello";
    str = 0; // Type 'number' is not assignable to type 'string'.
    let num: number = 0;
    num = "0"; // Type 'string' is not assignable to type 'number'.
    let big: bigint = 10n;
    big = 0; // Type 'number' is not assignable to type 'bigint'.
    let bool: boolean = true;
    bool = 1; // Type 'number' is not assignable to type 'boolean'.
    let n: null = null;
    n = undefined; // Type 'undefined' is not assignable to type 'null'.
    let u: undefined = undefined;
    u = null; // Type 'null' is not assignable to type 'undefined'.
    let sym: symbol = Symbol();
    sym = ""; // Type 'string' is not assignable to type 'symbol'.
    
    ※ bigint 型で BigInt literals are not available when targeting lower than ES2020 と表示されたら場合

    tsconfig.json の値を以下に変更する修正します。

    "compilerOptions" : { - "target" : "es5" , + "target" : "es2020" , "lib" : [ "dom" , "dom.iterable" , "esnext" , + "es2020" "allowJs" : true , "skipLibCheck" : true , "esModuleInterop" : true , "allowSyntheticDefaultImports" : true , "strict" : true , "forceConsistentCasingInFileNames" : true , "noFallthroughCasesInSwitch" : true , "module" : "esnext" , "moduleResolution" : "node" , "resolveJsonModule" : true , "isolatedModules" : true , "noEmit" : true , "jsx" : "react-jsx" "include" : [ "src"