26 ポイント 投稿者 xguru 2023-01-04 | 6件のコメント | WhatsAppで共有

#1 {集合(Set)} と考える
#2 宣言された型と絞り込まれた(narrowed)型を理解する
#3 オプショナルフィールドの代わりに判別可能なユニオンを使う
#4 型アサーションを避けるために型述語を使う
#5 ユニオン型の分配を制御する
#6 網羅的な検査によってコンパイル時に処理されていないケースをチェックする
#7 interface より type を使う
#8 適切な状況では配列よりタプルを使う
#9 推論された型が汎用的または具体的になるように制御する
#10 追加のジェネリック型パラメータを作るために infer を使う
#11 型操作で創造性を発揮してDRYな状態を保つ
まとめ

6件のコメント

 
tested 2023-01-04

7番は React の観点から書かれているように見えます。
私は type より interface を好みます。ほかの言語にもある構文ですし。

 
alstjr7375 2023-01-04

私もです。以前、TypeScriptハンドブックでも、できるだけインターフェースを優先して使うようにという助言があったと記憶しています。

 
bichi 2023-01-04

全部良いのですが、7の「interfaceよりtypeを使う」は、あえて言うほどのことでしょうか。ヒントと言えるほどではないですね。interfaceのほうが表現力に優れている場合もあります。例: interface Foo {(b: number): A; (): B}

 
a741593 2023-01-04

Type を擁護するつもりはないのですが、表現力がより高いという例がいまひとつ理解できません。該当の例文も type で同じように表現できるのではないでしょうか?

interface Foo {(b: number): A; (): B}
type Foo = {(b: number): A; (): B}

 
harimkims 2023-01-05

『Effective TypeScript』の本の中に、型とインターフェースのどちらを使うべきかを整理している部分があるので、引用してみます。

型とインターフェースのどちらを使うべきか、結論を出してみましょう。複雑な型であれば、迷うまでもなく型エイリアスを使えばよいです。 しかし、型とインターフェースのどちらの方法でも表現できる単純なオブジェクト型であれば、一貫性と拡張の観点から検討する必要があります。 一貫してインターフェースを使うコードベースで作業しているならインターフェースを使い、一貫して型を使っているなら型を使えばよいです。

スタイルがまだ確立されていないプロジェクトであれば、今後拡張される可能性があるかを考える必要があります。ある API の型宣言を書く必要があるなら、インターフェースを使うのがよいです。API が変更されたときに、ユーザーがインターフェースを通じて新しいフィールドをマージできるため有用だからです。 しかし、プロジェクト内部で使われる型で宣言マージが発生するのは、誤った設計です。 したがって、このような場合は型を使うべきです。