Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
TypeScriptハンズオン Github: @sor4chi 𝕏 Twitter: @monica18_pr
Slide 2
Slide 2 text
今日の目標 TypeScriptのニーズやメリットを理解する TypeScriptの仕組みを理解する TypeScriptを使えるようになる
Slide 3
Slide 3 text
JSの不満
Slide 4
Slide 4 text
JSの確認 JavaScriptは動的型付け言語 旧バージョンからの互換性を持ったアップデートを繰り返して いるせいで、負債と言わんばかりの難解な挙動がある
Slide 5
Slide 5 text
不満その1: 型がない 型がないので、変数や関数の型を把握するのが難しい
Slide 6
Slide 6 text
例えばこんなやつ Q: a のデータ型 is 何 string ? number ?
Slide 7
Slide 7 text
こんなやつも Q: add の引数の型 is 何 A: number ? null ?
Slide 8
Slide 8 text
不満その2: 暗黙的な型変換 色々なデータ型の演算が暗黙的なキャストで行われる
Slide 9
Slide 9 text
例えばこんなやつ Q: a の値 is 何 A: 20
Slide 10
Slide 10 text
No content
Slide 11
Slide 11 text
文字列の足し算は文字列の連結になるが、引き算は数値の引き 算になる そのため となる
Slide 12
Slide 12 text
不満その3: HTML上の値の取扱い
Slide 13
Slide 13 text
No content
Slide 14
Slide 14 text
Q: resultの値 is 何 A: 11
Slide 15
Slide 15 text
No content
Slide 16
Slide 16 text
input.value は文字列で返ってくるので、 value + 1 は 文字列の連結になる
Slide 17
Slide 17 text
その不満、 TypeScript で解決できますよ
Slide 18
Slide 18 text
TypeScript知識
Slide 19
Slide 19 text
TypeScriptとは TypeScriptはJavaScriptの 拡張言語 であり、JavaScriptにコ ンパイルタイムの型チェックを追加したもの(静的型付け言 語)。 ただし、コンパイル時に型チェックを行うだけで、実行時には 型チェックは行わない。
Slide 20
Slide 20 text
TypeScriptの目的 JSの無秩序で自由な世界を、型チェックを追加することで秩 序づけること。(型安全) プログラミングをする行為をTypeHintにより効率化するこ と。(型補完)
Slide 21
Slide 21 text
TypeScriptの本質 TypeScriptはJavaScriptに型チェック用の構文を導入したよ うなもの。 TypeScriptは トランスパイラ と呼ばれるコンパイラによって JavaScriptに変換される。
Slide 22
Slide 22 text
CやC++などが機械語でへコンパイルされるのに対し、 TypeScriptはJavaScriptに トランスパイル される。 高級言語 to 高級言語なのでトランス + コンパイル = トランス パイルだと思う
Slide 23
Slide 23 text
例えば... は
Slide 24
Slide 24 text
に変換される
Slide 25
Slide 25 text
本当に 型情報を追加しただけ である。 ※ 本当は拡張構文があったりするので純粋な変換をしているわ けではないが...
Slide 26
Slide 26 text
TypeScriptのエディタサポート
Slide 27
Slide 27 text
ビルド時に型チェックを行うのでいちいちトランスパイルを実 行するのは面倒。 そこで、エディタによる型チェックを行うことで、トランスパ イルを実行しなくてもプログラミングしているタイミングでそ のまま型チェックを行うことができる。
Slide 28
Slide 28 text
キャスト時の型推論
Slide 29
Slide 29 text
再代入時の型チェッ ク
Slide 30
Slide 30 text
メソッドの型補完
Slide 31
Slide 31 text
TypeScriptの型は堅牢だけどカジュアルに書けるため、とても 書き心地が良い。 自分(筆者)はTypeScriptじゃないと書きたくないレベル
Slide 32
Slide 32 text
TypeScriptのエコシステム
Slide 33
Slide 33 text
TypeScriptの導入
Slide 34
Slide 34 text
1. TypeScriptプロジェクトの作成 node.jsはJSのファイルで提供されているため、TypeScriptで 書く場合は型定義をインストールする必要がある。
Slide 35
Slide 35 text
2. TypeScriptの設定ファイルを作成 JSの勉強会で「ブラウザ向けのJS」と「サーバー向けのJS」 の違いを説明したが、TSでもそれをサポートするために設定フ ァイルを作成する必要がある。 (他にも色々な設定項目があるが)
Slide 36
Slide 36 text
設定ファイルは tsconfig.json というファイル名で作成す る。 https://typescriptbook.jp/reference/tsconfig/tsconfig.jso n-settings#バックエンドの場合 にサーバー向けの設定ファイルがあるので、それをコピペ 「2020年版フルスクラッチから作るなら」の「バックエンド の場合」 (設定項目が結構あって、自分でも把握しきれてない)
Slide 37
Slide 37 text
バックエンドのtsconfig.jsonを使った場合、 document や window などのブラウザ環境のグローバル変数が存在しない ため、エラーになる。
Slide 38
Slide 38 text
フロントエンドのtsconfig.jsonを使った場合、ちゃんと document や window などのブラウザ環境のグローバル変 数が存在し、補完されている。
Slide 39
Slide 39 text
3. package.jsonにスクリプトを追加 既存の"scripts"の"test"は削除して、"build"と"start"を追加 する。
Slide 40
Slide 40 text
4. TypeScriptのコンパイル 試しに src/index.ts を作成して と書いてみる。
Slide 41
Slide 41 text
dist ディレクトリが作成され、その中にコンパイルされた JSファイルが作成される。
Slide 42
Slide 42 text
dist/index.js を開いてみると このようにトランスパイルされていればOK
Slide 43
Slide 43 text
5. 実行 1 と表示されればOK
Slide 44
Slide 44 text
TypeScriptの文法
Slide 45
Slide 45 text
基本の型 number string boolean null (値が null -> ない) undefined (値が undefined -> 未定義)
Slide 46
Slide 46 text
他にも色々あるが、基本的にはこれだけで十分
Slide 47
Slide 47 text
型注釈 変数や関数の引数に型をつけることができる それ以外の型の変数や値を代入しようとするとエラーになる
Slide 48
Slide 48 text
配列
Slide 49
Slide 49 text
インターフェース
Slide 50
Slide 50 text
オブジェクトやclassの型などプロパティを持つ複合的な型を 定義するときに使う
Slide 51
Slide 51 text
Type Alias 型を変数として持つイメージ インターフェースと同じように使える、こっちの方が表現力が あって万能だが、オブジェクトとクラスをinterface、それ以外
Slide 52
Slide 52 text
合併型(Union Types) その変数が複数の型のどれかを持つことを表現する
Slide 53
Slide 53 text
応用:interfaceと合わせて使うと便利
Slide 54
Slide 54 text
こういう感じで、 role の値によって hoge の有無を変える ようにする
Slide 55
Slide 55 text
roleがadminかどうかが不確定なので、hogeがあるかどうかも 不確定で型エラーになる
Slide 56
Slide 56 text
こうすると、roleがadminの場合はhogeが必ずあることが保証 されるので、型エラーにならない それ以外の時は「値が存在しない」ことを表す null か「値 が未定義」ことを表す undefined を返すとよい
Slide 57
Slide 57 text
交差型(Intersection Types) 複数の型を結合する
Slide 58
Slide 58 text
リテラル型 値を型として使える!(これが便利)
Slide 59
Slide 59 text
オプショナル型 ? をつけると、そのプロパティがあってもなくてもよくなる
Slide 60
Slide 60 text
関数にも使える 「なくても良い」型なので実際は number | undefined と いう型になる
Slide 61
Slide 61 text
実践編
Slide 62
Slide 62 text
ReactとTypeScript
Slide 63
Slide 63 text
Reactのコンポーネントは関数として定義することができる 例えばpropsを受け取るコンポーネントは以下のように書ける
Slide 64
Slide 64 text
これをTypeScriptで書くと以下のようになる
Slide 65
Slide 65 text
Propsの実体は関数の引数の型なのでこのように書く
Slide 66
Slide 66 text
JSのReactでできたTodoアプリを TypeScriptに移植する
Slide 67
Slide 67 text
実演/演習タイム 試しに、JSのReactでできたTodoアプリをTypeScriptに移植 してみる
Slide 68
Slide 68 text
https://github.com/saitamau-maximum/react-todo-js このリポジトリをcloneしてそのフォルダに入り、 npm install して npm start すると動く
Slide 69
Slide 69 text
ご清聴ありがとうございました 質問などあれば気軽にどうぞ!