0Pricing
TypeScript Academy · レッスン

anyの排除、unknownと絞り込みの優先

anyをunknownと絞り込みに置き換え、小さなガードとアサーション関数を追加し、ビルドを壊さずにstrictフラグを段階的に有効化します

「anyの排除、unknownと絞り込みの優先」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン1/2です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全2レッスンが含まれています。

導入

目標:anyの使用箇所をなくします。信頼できない値にはunknownを優先し、簡単なチェックで絞り込みます。小さなガードを追加し、strictフラグを段階的に有効にします。

  • any → unknown
  • typeof/in/instanceofによる絞り込み
  • アサーション関数

any の落とし穴

anyは安全性を無効にします。値の形状の誤りや文字列同士の計算がコンパイル時に見逃され、後で失敗する可能性があります。

// any hides bugs
function avgBad(values: any): number {
  // Compiles even if values is not an array of numbers
  return values.reduce((a: number, b: number) => a + b, 0) / values.length
}

// Runtime crash examples:
// avgBad(123)
// avgBad(["1","2"]) // string addition!

unknown と絞り込み

外部から受け取る入力にはunknownを使用します。Array.isArrayとtypeofで型を絞り込んでから、安全に計算します。

// unknown forces checks
function avg(values: unknown): number {
  if (!Array.isArray(values)) throw new Error("values must be an array")
  const nums = values.filter((v): v is number => typeof v === "number")
  if (nums.length === 0) throw new Error("no numbers")
  const sum = nums.reduce((a, b) => a + b, 0)
  return sum / nums.length
}

// avg([1,2,3]) → 2; avg("oops") throws early with a clear message

型ガード

predicate x is Tを作成すると、呼び出し側で型をきれいに絞り込めます。ガードは小さく保ち、構造のチェックに集中させます。

// Small predicate to reuse narrowing
export type User = { id: string; name: string }

export function isUser(x: unknown): x is User {
  return typeof x === "object" && x !== null
    && typeof (x as any).id === "string"
    && typeof (x as any).name === "string"
}

export function hello(x: unknown) {
  if (!isUser(x)) throw new Error("invalid user")
  return `Hello, ${x.name}`
}

アサーション関数

アサーション関数(asserts x is T)は、実行後に型を絞り込みます。必須の事前条件に使用し、明確なメッセージを付けて例外をスローします。

// Assertion function throws or narrows
function assertUser(x: unknown): asserts x is { id: string; name: string } {
  if (typeof x !== "object" || x === null) throw new Error("not an object")
  const o = x as Record<string, unknown>
  if (typeof o.id !== "string" || typeof o.name !== "string") throw new Error("bad user")
}

export function greetUnsafe(x: unknown) {
  assertUser(x) // now x is narrowed after this call
  return `Hi ${x.name}`
}

厳格化の計画

計画:

  • noImplicitAnyを有効にし、まず新しく発生したエラーを修正します。
  • 外部入力用のガードを導入します。
  • strictNullChecksを有効にし、undefinedを明示的に処理します。
  • 残っているanyをESLintで追跡し、時間をかけて減らします。

unknown と any の比較チェック

クイックチェック:信頼できないデータには、なぜanyよりunknownを優先するのですか?

まとめ

まとめ:anyをunknownに置き換え、小さなガードまたはアサーションを追加し、strictフラグを段階的に強化してビルドを正常に保ちます。

よくある質問

「anyの排除、unknownと絞り込みの優先」レッスンは無料ですか?

はい。「anyの排除、unknownと絞り込みの優先」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全2レッスンが含まれています。

「anyの排除、unknownと絞り込みの優先」で何を学びますか?

anyをunknownと絞り込みに置き換え、小さなガードとアサーション関数を追加し、ビルドを壊さずにstrictフラグを段階的に有効化します ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

TypeScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/2です。

「anyの排除、unknownと絞り込みの優先」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このTypeScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. anyの排除、unknownと絞り込みの優先
  2. strictフラグを段階的に適用する
← TypeScript Academyに戻る