TypeScript Nullable 型宣言
例
let name: string | null;
name = "John"; // OK
name = null; // OK
上記コードでは、name
変数は string | null
型で宣言されています。つまり、name
は文字列の値を持つことも、null の値を持つこともできます。
もう一つの方法
TypeScript 3.7 以降では、Optional
型を使用することもできます。これは、型をオプションにするための便利な方法です。
import { Optional } from 'type-fest';
type NullableString = Optional<string>;
let name: NullableString;
name = "John"; // OK
name = null; // OK
Optional
型を使用すると、型をより簡潔に表現することができます。
注意
- 型推論を使用する場合、TypeScript は変数の初期化値に基づいて nullable な型を推測することがあります。例えば、変数が null で初期化されている場合、TypeScript はその変数を nullable な型として推測します。
- nullable な型を使用する際には、null または undefined の値が想定されることを常に考慮する必要があります。適切なチェックを行い、エラーを回避してください。
TypeScript での Nullable 型宣言の例
基本的な方法: 型名に ? を付ける
// 文字列型を nullable に宣言
let nullableString: string | null;
// nullableString に文字列を代入
nullableString = "Hello, world!";
// nullableString に null を代入
nullableString = null;
Optional 型を使用する (TypeScript 3.7 以降)
import { Optional } from 'type-fest';
// Optional<string> で文字列型をオプションに
type NullableString = Optional<string>;
// NullableString を使用
let optionalString: NullableString;
optionalString = "Hello again!";
optionalString = null;
型推論による nullable 型
// 初期値が null なので、型推論で nullable 型になる
let inferredNullable: string | null = null;
// 値を代入することもできる
inferredNullable = "Another string";
条件付き型を使用した nullable 型
// 条件付き型を使って、条件に基づいて nullable にする
type MaybeString = string | null;
type NullableIf<T, Condition extends boolean, Default> = Condition extends true ? T | null : Default;
let conditionalNullable: NullableIf<string, true, number>;
conditionalNullable = "Maybe a string";
conditionalNullable = null;
// conditionalNullable = 1; // 型エラー
説明
- 条件付き型: 条件に基づいて、型を nullable にするか否かを制御できます。
- 型推論: 変数の初期値に基づいて、TypeScript が自動的に型を推論します。
Optional
:type-fest
ライブラリのOptional
型を使用すると、型をオプションにすることができます。| null
: 型名の後に| null
を付けることで、その型が null を受け取ることができることを示します。
条件付き型 (Conditional Types) を使用する
条件付き型は、型を条件に基づいて定義することができます。これにより、特定の条件が満たされた場合にのみ、型を nullable にすることができます。
type NullableIf<T, Condition extends boolean, Default> = Condition extends true ? T | null : Default;
let conditionalNullable: NullableIf<string, true, number>;
conditionalNullable = "Maybe a string";
conditionalNullable = null;
// conditionalNullable = 1; // 型エラー
ジェネリック型 (Generic Types) を使用する
ジェネリック型は、型のパラメータ化を可能にします。これにより、型をより柔軟に定義することができます。
type Nullable<T> = T | null;
let genericNullable: Nullable<string>;
genericNullable = "A generic nullable string";
genericNullable = null;
ユーティリティ型 (Utility Types) を使用する
TypeScript には、さまざまなユーティリティ型が組み込まれています。これらの型を利用することで、型をより簡単に操作することができます。
type NullableString = Partial<string>;
let utilityNullable: NullableString;
utilityNullable = {
length: 10,
};
utilityNullable = null;
インターフェース (Interfaces) を使用する
インターフェースは、オブジェクトの型を定義するための構造です。インターフェースを使用して、オブジェクトの特定のプロパティを nullable にすることができます。
interface NullableObject {
name?: string;
age: number;
}
let interfaceNullable: NullableObject;
interfaceNullable = {
age: 20,
};
interfaceNullable = null;
typescript nullable