実践TypeScript
戻り型注釈はすべての関数につける必要はない。むしろあえて書かないほうがいい場合さえあるとのこと。詳しくは追って説明があるとのこと。p034
unknown型は代入はanyと同じだが、メソッドを呼ぼうとすると型エラーになる。利用に厳しいany。
neverの使い道がわからなかった。
戻り型をvoidとするのとneverとするの違いはなに?
コード書いて理解した。
Literal Typeを定数やenumとして使えるの面白い。
typeof はよくわかるが、keyofの具体的なユースケースがわからなかった。
constructorのオーバーロードはない。というか複数定義できないようになっている。
サブクラスでオーバーライドしたときはsuperの呼び出しがないとエラーになる。サブクラスでオーバーライドしなかったときは、親クラスのconstructorを使う
文字列enumは「各メンバーをString Literal Typesで初期化しなければなりません」というのはどういう意味だろう?p051
constへの代入はLiteral Typeで推論される!便利。
ただし、constをlet(再代入可能な変数)に代入すると、その時点でLiteral Typeではなくなる。Widening Literal Typeという。
const宣言時に明示的なLiteral Typeを指定すればそのまま。
ArrayとTupleは宣言の仕方によって呼び分けられている
as [...] で全体にアサーションしたものがtuple?
tupleは、追加するときはそれらのunion typeを追加できる。
Array(Tuple)自体の型推論は、tsconfigのtargetからArray.prototypeに定義されている関数などが使えるようになる。
たとえば、esnextをしているすると、flatが使える、など。
オブジェクトのプロパティは再代入可能なので、Literal Typeとして推論されたときはasでアサーションする
関数の戻り型推論は、コードを優先して推論させるのか、型宣言をして制約するかを、判断してアサーションするかどうかを決める
分岐で戻り値の型が変わるような場合、推論させるとunion typeとなる。これをよしとするかということかなぁ。
Promiseの戻り型、まずtargetをes2015以上にする必要がある
戻り型を指定しない場合、Promise<any>と書いてあるが、試してみるとPromise<unknown>になっていた。確かにこのほうが型安全ではあると思った。
JSONから型定義を作れる。resolveJsonModuleとesModuleInteropをtrueにしてみよう
esModuleInteropはなくなった?
option引数は | undefined と解釈される
デフォルト引数を指定した場合、使う側からはオプション引数と同じように扱われるが、関数内部ではundefinedではないことが確定される。よくできている。
プロパティの型推論についてはコードにコメントを書いた。
TypeScript 3.4からはas constでLiteral Typesを適用できる。tupleとか定数を指定するのに便利。Widening Literal Typesを抑止することもできる。
定数や変更されたくないものはどんどんas constをつけていく!
オブジェクトリテラルにつけると、値が全部Literal Typesになる
{}型の互換性(p100)はよくわからなかったのであとでふりかえる
Conditional TypesとUtility Typesは具体例を見ながらやろう
create-react-app --typescriptはなくなるっぽい。create-react-app --templete typescriptとする
Reactの章の最後は書籍の中にでてこないコードがあるのでは?React使ってたら自明なものがあるのだろうか。