0Pricing
TypeScript Academy · レッスン

unknown と any: より安全な選択肢

unknown を使うと、利用前に型の確認が必要になる理由を学びます。

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

ようこそ

TypeScript 3.0では、`any`に代わる型安全な型として`unknown`が導入されました。このレッスンでは、`unknown`がより安全である理由と、使用すべき場面を学びます。

anyの問題点

`any`を使うと、TypeScriptはすべてのチェックを停止します。メソッドの呼び出し、プロパティへのアクセス、型付き変数への代入を制限なく実行できるため、安全性が失われます。
let val: any = getData();
val.someMethod(); // TypeScript: OK. Runtime: possible crash

unknownの導入

`unknown`は型安全なトップ型です。`any`と同様に任意の値を保持できますが、`any`とは異なり、まず型を絞り込まなければ使用できません。
let val: unknown = getData();
// val.someMethod(); // Error: Object is of type 'unknown'

使用前にunknownを絞り込む

`unknown`の値を使用するには、型チェックによって型を絞り込む必要があります。TypeScriptは、絞り込んだ型に対する操作を許可するようになります。
let input: unknown = getInput();
if (typeof input === 'string') {
  console.log(input.toUpperCase()); // OK — narrowed to string
}

unknownは特定の型に代入できない

チェックまたはアサーションなしに、`unknown`を特定の型へ代入することはできません。これにより、値を使用する前に検証することが強制されます。
let x: unknown = 'hello';
// let s: string = x; // Error
let s: string = x as string; // OK with assertion

catchブロックでunknownを使用する

TypeScript 4.0以降では、catchしたエラーはデフォルトで`unknown`になります。これは、エラーの型をチェックするよう強制するため、以前の`any`というデフォルトより安全です。
try {
  doSomething();
} catch (err: unknown) {
  if (err instanceof Error) {
    console.log(err.message); // safe
  }
}

外部データにunknownを使用する

JSONを解析するときやAPIからデータを受け取るときは、まず`unknown`として型付けし、使用前に検証してください。
const raw: unknown = JSON.parse(text);
if (
  typeof raw === 'object' &&
  raw !== null &&
  'name' in raw
) {
  console.log((raw as any).name);
}

unknownと型ガード

ユーザー定義の型ガードは`unknown`と完全に連携し、使用前に複雑な構造を検証できます。
function isUser(val: unknown): val is { name: string } {
  return typeof val === 'object' && val !== null && 'name' in val;
}

unknownとnever

`unknown`はトップ型であり、すべての型を代入できます。`never`はボトム型であり、どの型も代入できません。この2つは正反対です。
// unknown: anything can be assigned to it
let a: unknown = 42; // OK

// never: nothing can be assigned to it
function fail(): never { throw new Error(); }

anyとunknownの選択

型が確定していないデータ(JSON、ユーザー入力、外部API)を受け取る場合は`unknown`を使用します。`any`は、移行作業中や型定義のないライブラリを扱う場合など、最後の手段としてのみ使用してください。

実行時検証ライブラリ

Zod、Valibot、io-tsなどのライブラリは`unknown`と完全に連携します。これらは解析と検証を行い、`unknown`の入力から型付けされた値を返します。
import { z } from 'zod';
const UserSchema = z.object({ name: z.string(), age: z.number() });
const user = UserSchema.parse(unknownData); // throws if invalid

クイックチェック

TypeScriptで`unknown`の値を使用できるようになる前に、何をする必要がありますか?

まとめ

`unknown`は`any`に代わる安全な型です。任意の値を受け入れますが、使用前に型を絞り込む必要があります。外部データ、catchブロック、そして型が本当に不明なあらゆる場面で使用してください。

よくある質問

「unknown と any: より安全な選択肢」レッスンは無料ですか?

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

「unknown と any: より安全な選択肢」で何を学びますか?

unknown を使うと、利用前に型の確認が必要になる理由を学びます。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「unknown と any: より安全な選択肢」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. プリミティブ型: string、number、boolean
  2. any 型と避けるべき理由
  3. unknown と any: より安全な選択肢
  4. null、undefined、厳格な null チェック
← TypeScript Academyに戻る