Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
第3回 TypeScriptを使おう
Search
akatsuki1910
August 22, 2023
0
10
第3回 TypeScriptを使おう
akatsuki1910
August 22, 2023
Tweet
Share
More Decks by akatsuki1910
See All by akatsuki1910
後輩に伝えたいこと
akatsuki1910
0
2
難解(かもしれない)言語
akatsuki1910
1
29
Reactのチュートリアルをしよう3
akatsuki1910
0
14
クソドメインを取ろう
akatsuki1910
0
29
Reactのチュートリアルをしよう2
akatsuki1910
0
14
HTMLとCSSとコンポーネント
akatsuki1910
0
18
Reactのチュートリアルをしよう
akatsuki1910
0
16
そのコレクション合ってる?
akatsuki1910
0
20
第2回 TypeScriptを使おう
akatsuki1910
0
21
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
460
33k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.4k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
Facilitating Awesome Meetings
lara
50
6.1k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.4k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Designing for Performance
lara
604
68k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Agile that works and the tools we love
rasmusluckow
328
21k
Site-Speed That Sticks
csswizardry
2
190
Transcript
第3回 TypeScriptを使おう ~分からないなら書け~ らり
突然ですが、問題です こちらのオブジェクト、変数aとbには型がついてませんが、受け入 れる側で型を準備しているため、型エラーが発生しています これのような書き方はいいでしょうか、悪いでしょうか
答え 型の宣言は、値の宣言をした時に当てましょう JSの仕様を知らないと、cのようなコードを書いてしまう しかし、変数宣言で型をちゃんとつけてないため、なん のエラーも出ない もし型推論に頼ってる方がいれば、JSを完全に理解して いる人か、TypeScriptを知らない人(過激)
型推論 型を明示的に宣言してないと、型を勝手に推論してつけてくれる constとletでは、推論結果が異なる ただ、明示的に型を宣言すれば、気にする必要はない
関数の型の宣言 足し算関数を例にして、説明します 最終目的としては、数値、もしくは数値の文字列が来た時に、足し算をして返す関数を 作ります
関数の型の宣言 まず、普通に関数を用意する JavaScriptではなんら問題ないが、TypeScriptでは型のエラーがでる 特に、引数は型推論を行うことができないため、明示的に型を定義する必要がある
関数の型の宣言 引数に型をつけた 関数の返り値はreturnで書かれた型を推論して提供してくれる
関数の型の宣言(寄り道) 返り値の型を宣言していないと、returnして いるものの、型が間違っているかが分から ない場面がある 多くの場合は必要ないが、宣言しておいた 方がミスは確実に減る eslintで強制可能 https://typescript-eslint.io/rules/explicit-function-return-typ e/
関数の型の宣言 stringも扱いたいので、ジェネリクスを用いる アロー関数の場合、JSXのコンポーネントの書き方になるので、「,」をつけることで解決 する https://github.com/microsoft/TypeScript/issues/15713
関数の型の宣言 ジェネリクスに何も宣言していない場合、型推論されたものが勝手に入る 今回であれば、引数bの型がTに入るため、bとcの型が同じでないとエラーが出る https://github.com/microsoft/TypeScript/issues/15713
関数の型の宣言(寄り道) 関数を呼び出す時の、型引数の呼び出し方はこう 複数ある場合はコンマで区切る(普通の引数の呼び出し方と一緒)
関数の型の宣言(寄り道) xとyは型を指定してないが、xの方は第一引数と同じ型でないとエラーが出る a,bとc,dは一見同じように見えるが、前者は配列が生成された時、後者は値が代入され る時に型のチェックが行われるため、変数に入れる前に他に処理を書きたい場合は前 者の配列の作り方の方が好ましい
関数の型の宣言 extendsを用いて、入る型を制限する これにより、Tが入る型に制約が出来たので、エラーもきちんと出るようになった
関数の型の宣言 片方が数字、もう片方が文字列でも行えるようにした これにより、add関数の型指定が出来た あとは中でNaNを確認したりしたらちゃんとしたadd関数ができる
関数の型の宣言 functionを使った場合 書き方にほぼ変わった部分はない
関数型 関数に型注釈を行うことで、型をつけることができる これにより、返り値の型が間違えていた時に気づける
関数型 関数の型は、呼び出し方が2パターンある 何も分からない内は全てアロー関数で定義しておけばよ い(thisの問題) 上(Props1)は省略記法、下(Props2)は完全記法と呼ばれ たりする https://typescriptbook.jp/reference/functions/function-type-declaration
関数型 Propsで定義しているものは、あくまで引数での関数の型 の定義のみ そのため、引数に入れている関数の引数(aの引数)が何も 入っていなくてもエラーにはならない(ここはjsの話)
ちゃんと関数理解してる? アロー関数は後発 機能が追加された訳ではなく、いらない機能を抜いたもの 詳しい話 場面によっては、functionを一切定義しない方がよかったりもする これはプロジェクトメンバーと要相談 https://typescriptbook.jp/reference/functions/function-expression-vs-arrow-functions
ちゃんと関数理解してる? アロー関数は再宣言できない 普通の関数はオーバーライドの機能があるため、再宣言出来る そのため、関数の型を宣言する場合はアロー関数で書いた方がミスが減る
関数の返り値の型を抜き取る ReturnTypeというUtils Typesを用いる これにより、定義した関数の返り値の型を抜き取ることができるため、同じ型を再定義す るようなことをしなくていい
関数の返り値の型を抜き取る また、定義した時の型が取れるため、関数の型引数を使用することによって、得れる型 も変わってくる そのため、前に型引数を使用して関数を定義しておくと、型も取りやすくなる
関数の引数の値の型を抜き取る 引数はParametersを用いる 返ってくる値は配列なので、引数の順番が大事になる
void型 関数の返り値の型がundefinedならば、undefinedが返ってくるという意味 voidは値を使用しないという意味 とりあえず何も返したくない時はvoidを書いとけばよい https://typescriptbook.jp/reference/functions/void-type
void型 ただ、関数型(アロー関数のやつ)だと、voidでも何が返っても型エラーが出ない functionなら出る また、返り値がundefinedの時にreturnを書いていないとエラーが出る v5.1からは出ない https://typescriptbook.jp/reference/functions/void-type
void型 こんな危険なことができる ただ、何かこの値に処理をかけようとした際に型エラーが出るため、そこまで重要ではな い
課題 課題1 なぜこれのadd2がエラーになるかを答えてください