• 日本語
  • no-null-type

    warn

    型注釈の位置では、| null は禁止されています。

    存在しない場合は、undefined またはオプションの ? を使用してください。

    チェック対象

    | null (または null |) が以下の場所に出現している場合:

    • 関数のパラメータ型注釈
    • アロー関数のパラメータ型注釈
    • 初期化子を持つ変数/プロパティ型注釈

    理由

    TypeScript には、「値がない」ことを表す方法が nullundefined の 2 つあります。

    これらを混在させると、呼び出し箇所ごとに認知的な負担が生じます。

    // 呼び出し側は、null と undefined のどちらを渡すべきかを考えなければなりません。
    
    function process(str: string | null) {}

    undefined は TypeScript における標準的な不在値です。

    • Partial<T>null ではなく undefined を使用します。
    • オプショナルチェイニング (?.) と null 合体 (??) は undefined のために設計されました。
    • JSON.stringifyundefined 値を省略しますが、null はシリアライズします。null が適切なのは、シリアライズ時のみです (下記の例外を参照)。

    undefined のみを使用することで、コードベース内のすべての型が簡素化されます。

    ✗ 誤り

    function process(str: string | null) {}
    
    const handler = (data: { value: string | null }) => {};
    
    let current: Item | null = null;

    ✓ 正しい

    function process(str?: string) {}
    
    const handler = (data: { value?: string }) => {};
    
    let current: Item | undefined;

    例外 — JSON変換境界

    JSON.parseの直後では、データにnullが含まれる可能性があります。

    境界でundefinedに正規化してから、下流に渡します。

    // ✓ 境界層 — ここではnullが許容されます
    const raw = JSON.parse(json) as { value: string | null };
    
    const normalized = {
      value: raw.value ?? undefined,
    };
    
    // ✓ 下流 — undefinedのみ
    process(normalized.value);

    ソース

    grit/no-null-type.grit