先週の This Week In React に流れてきたやつ。
🧵 TypeScript Cheat Sheets by @orta
— Sebastien Lorber 🇫🇷 🦖 ⚛️ 📨 (@sebastienlorber) 2022年1月19日
4 nicely designed and official cheatsheets now online:
- Types
- Interfaces
- Classes
- Control Flow Analysishttps://t.co/fnqAcuU8c8 pic.twitter.com/D7BlZsyvjf
ざっと読んでみたけどそこまで目新しい発見はありませんでした。以下メモ。 💬 はコメント。
Classes
- Common Syntax
- Generics
- Parameter Properties
- コンストラクタ引数に
public
,private
,protected
,readonly
をつけると、インスタンス変数に自動的にセットしてくれる TypeScript 独自の機能 - https://www.typescriptlang.org/docs/handbook/2/classes.html#parameter-properties
- 💬 これ最近まで知らなかった
- コンストラクタ引数に
class Location { constructor(public x: number, public y: number) {} } const loc = new Location(20, 40); loc.x // 20 loc.y // 40
- Abstract Classes
- Decorators and Attributes
- デコレータをクラス、メソッド、アクセサ、プロパティやパラメータに使えるよ、とだけ
- どういう動作になるのかは書かれておらず
Interfaces
- Common Syntax
- 💬
new XXX()
したときの型の宣言とかしばらく知らなかったnew(s: string): JSONResponse;
- 💬
- Extension via merging
- interface は複数宣言することでマージできる
Types
左上の Type vs Interface にどっち使う?の判断材料について言及されていた。
- Type vs Interface
- Interface はオブジェクトの形状を表現するのにしか使えない
- Interface は複数回宣言することで拡張できる
- パフォーマンスがクリティカルな型は Interface のほうが速い可能性がある
- 💬 このへんの型については新しい知見はなかった
- Primitive Type, Object Literal Type, Tuple Type, Union Type, Intersection Types(
&
によるマージ)
- Primitive Type, Object Literal Type, Tuple Type, Union Type, Intersection Types(
- Type Indexing
- Type from Value:
typeof 値
で値を元にした型が作れる - Type from Func Return:
ReturnType<関数の型>
で関数の戻り値の型が作れる - Type from Module
以下はライブラリを作成するときや既存のJavaScriptコードを表現するときに素晴らしい機能だが、多くのTypeScriptアプリケーションではほとんど使わないとのこと。
- Mapped Types
type Artist = { name: string, bio: string }; type Subscriber<Type> = { [Property in keyof Type]: (newValue: Type[Property]) => void } type ArtistSub = Subscriber<Artist>
- Conditional Types:
A extends B ? C : D
- Template Union Types
- 型にテンプレートリテラルを使う
type AllLocaleIDs = `${SupportedLangs}_${FooterLocaleIDs}_id`
Control Flow Analysis
- If Statements
- if で型を絞り込む
- Discriminated Unions
- Union の各メンバが同じプロパティを持っている場合、 if や switch で型を絞り込める
type Responses = | { status: 200, data: any } | { status: 301, to: string } | { status: 400, error: Error }
- Type Guards
- 関数の戻り値の型に
is
を使うやつ - これは
as
と同じく TypeScript の推論に頼らず自分で宣言しているだけなので取り扱い注意
- 関数の戻り値の型に
- Assertion Functions
- 関数の戻り値の型を
asserts <引数> is SomeType
で定義するやつ
- 関数の戻り値の型を
- Assignment
as const
所感
- 「全然知らねえ!」というのはなかったよかった
- Mapped Types とか Conditional Types とか Assertion Functions とか、説明聞いただけだとよくわからんみたいなのが最低限のサンプルコード載せてくれてるのはありがたい