より良いTypeScriptプログラマーになるための11のヒント [翻訳]
(velog.io)#1 {集合(Set)} と考える
#2 宣言された型と絞り込まれた(narrowed)型を理解する
#3 オプショナルフィールドの代わりに判別可能なユニオンを使う
#4 型アサーションを避けるために型述語を使う
#5 ユニオン型の分配を制御する
#6 網羅的な検査によってコンパイル時に処理されていないケースをチェックする
#7 interface より type を使う
#8 適切な状況では配列よりタプルを使う
#9 推論された型が汎用的または具体的になるように制御する
#10 追加のジェネリック型パラメータを作るために infer を使う
#11 型操作で創造性を発揮してDRYな状態を保つ
まとめ
6件のコメント
7番は React の観点から書かれているように見えます。
私は
typeよりinterfaceを好みます。ほかの言語にもある構文ですし。私もです。以前、TypeScriptハンドブックでも、できるだけインターフェースを優先して使うようにという助言があったと記憶しています。
この内容ですね。
全部良いのですが、7の「
interfaceよりtypeを使う」は、あえて言うほどのことでしょうか。ヒントと言えるほどではないですね。interfaceのほうが表現力に優れている場合もあります。例:interface Foo {(b: number): A; (): B}Type を擁護するつもりはないのですが、表現力がより高いという例がいまひとつ理解できません。該当の例文も
typeで同じように表現できるのではないでしょうか?interface Foo {(b: number): A; (): B}
type Foo = {(b: number): A; (): B}
『Effective TypeScript』の本の中に、型とインターフェースのどちらを使うべきかを整理している部分があるので、引用してみます。
スタイルがまだ確立されていないプロジェクトであれば、今後拡張される可能性があるかを考える必要があります。ある API の型宣言を書く必要があるなら、インターフェースを使うのがよいです。API が変更されたときに、ユーザーがインターフェースを通じて新しいフィールドをマージできるため有用だからです。 しかし、プロジェクト内部で使われる型で宣言マージが発生するのは、誤った設計です。 したがって、このような場合は型を使うべきです。