Open1

TypeScriptのジェネリクスとは

naon708naon708

関数定義側で 関数名<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 など)