Open1
TypeScriptのジェネリクスとは
関数定義側で 関数名<T>
のように書くことによって、引数で与えられる値の型を柔軟に定義できる。
※<T>
のT
の部分はなんでもOK。
// useStateの定義 function useState<S>(initialState: S | (() => S)): [S, Dispatch<SetStateAction<S>>];
// 推論で十分(右辺から S=number と分かる)
const [n, setN] = useState(0);
// 空配列は never[] になりがち → 明示
const [tasks, setTasks] = useState<Task[]>([]);
// nullスタートはユニオンで
const [user, setUser] = useState<User | null>(null);
- 初期値から安全に推論できるなら 型指定は省略
- 空配列/空オブジェクト/null 始まりなら 明示(Task[], User | null など)