TypeScript で useState に型注釈
React Hook で useState に型注釈を付ける (TypeScript)
TypeScript を使用して React の useState Hook に型注釈を付けることで、コードの読みやすさ、保守性、および型安全性を向上させることができます。
基本的な使い方
import React, { useState } from 'react';
function MyComponent() {
const [count, setCount] = useState<number>(0);
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>Increment</button>
</div>
);
}
useState<number>(0)
:useState
Hook にジェネリック型number
を指定しています。これにより、count
変数には数値のみが格納されることが保証されます。
配列の型注釈
const [items, setItems] = useState<string[]>([]);
string[]
:items
変数が文字列の配列であることを示します。
オブジェクトの型注釈
const [user, setUser] = useState<{ name: string; age: number }>({ name: '', age: 0 });
{ name: string; age: number }
:user
変数が特定の構造を持つオブジェクトであることを示します。
カスタム型の使用
interface User {
name: string;
age: number;
}
const [user, setUser] = useState<User>({ name: '', age: 0 });
- カスタム型
User
を定義して、より明確な型注釈を提供することができます。
型推論
TypeScript は多くの場合、型を推論することができます。
const [count, setCount] = useState(0); // 型は number に推論される
複数の値の管理
const [count, setCount] = useState(0);
const [name, setName] = useState('');
- 複数の
useState
Hook を使用して、異なる値を管理することができます。
型安全性の確保
型注釈を使用することで、誤った型を代入するなどのエラーをコンパイル時に検出することができます。これにより、バグの発生を減らすことができます。
TypeScript で useState に型注釈を付ける例
import React, { useState } from 'react';
function MyComponent() {
const [count, setCount] = useState<number>(0);
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>Increment</button>
</div>
);
}
- 解説
useState<number>(0)
:count
変数に数値の型を指定しています。setCount(count + 1)
:count
の値をインクリメントします。
配列の型注釈
const [items, setItems] = useState<string[]>([]);
const [user, setUser] = useState<{ name: string; age: number }>({ name: '', age: 0 });
interface User {
name: string;
age: number;
}
const [user, setUser] = useState<User>({ name: '', age: 0 });
- 解説
型推論
const [count, setCount] = useState(0); // 型は number に推論される
const [count, setCount] = useState(0);
const [name, setName] = useState('');
型推論の活用
TypeScript は多くの場合、型を自動的に推論することができます。そのため、明示的な型注釈を省略できることがあります。
const [count, setCount] = useState(0); // 型は number に推論される
インターフェースや型エイリアスの使用
複雑なオブジェクト構造の場合、インターフェースや型エイリアスを使用して型を定義し、再利用することができます。
interface User {
name: string;
age: number;
}
const [user, setUser] = useState<User>({ name: '', age: 0 });
ジェネリック型のパラメータ化
useState
のジェネリック型パラメータを他の型に置き換えることで、より柔軟な型注釈が可能になります。
const [items, setItems] = useState<Array<string>>([]);
条件付き型とテンプレート文字列
条件付き型やテンプレート文字列を使用して、より複雑な型注釈を行うことができます。
type Nullable<T> = T | null;
const [name, setName] = useState<Nullable<string>>(null);
型ガードと型アサーション
型ガードや型アサーションを使用して、変数の型を特定し、それに応じた操作を行うことができます。
const [value, setValue] = useState<number | string>(0);
function handleValue(newValue: number | string) {
if (typeof newValue === 'number') {
setValue(newValue); // 型ガード
} else {
setValue(newValue as string); // 型アサーション
}
}
TypeScript の型推論機能の理解
TypeScript の型推論機能を理解し、適切に活用することで、型注釈の量を減らしながら、コードの型安全性を確保することができます。
reactjs typescript react-hooks