0Pricing
TypeScript Academy · レッスン

TypeScript 5.1〜5.2:推論の改善

SetterとGetterの型の独立性、およびusing宣言を確認します。

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

TypeScript 5.1の概要

TypeScript 5.1(2023年6月リリース)では、setterとgetterの型の独立性、JSX要素型の柔軟性、エディターのリンクカーソル、パフォーマンスの最適化が向上しました。

// npm install typescript@5.1

setterとgetterの型の独立性

5.1より前は、setterとgetterで同じ型を使う必要がありました。現在は、getterが返す型をsetterが受け取る型より広くできます。これは値の型を変換するパターンに便利です。

class Temperature {
  get celsius(): string { return this._c + "°C"; } // string
  set celsius(value: string | number) {             // string | number
    this._c = Number(value);
  }
  private _c = 0;
}

JSX の子要素としての undefined

TS 5.1 では、React 18 の動作に合わせて、コンポーネントの render 関数から undefined を直接(null に加えて)返せるようになりました。

// TS 5.1+: OK
function Widget(): undefined { return undefined; }
// Before 5.1: had to return null or JSX element

JSX 要素型の柔軟性

新しい JSX.ElementType 制約により、カスタム JSX ファクトリの柔軟性が高まり、React 以外の環境で役立ちます。

// Custom JSX element types supported more naturally in 5.1

TypeScript 5.2 の概要

TypeScript 5.2(2023 年 8 月リリース)では、using 宣言(Explicit Resource Management)、デコレーターのメタデータ、配列のコピー用メソッドが導入されました。

// npm install typescript@5.2

using 宣言

using は Explicit Resource Management の提案を実装します。リソースがスコープ外に出ると、その [Symbol.dispose]() メソッドが呼び出されます。

// Requires lib: ["es2022", "esnext.disposable"]
function getConnection(): Disposable {
  const conn = openDb();
  return { [Symbol.dispose]() { conn.close(); } };
}

{
  using conn = getConnection();
  // conn.close() called automatically at block end
}

非同期破棄のための await using

await using は using と同様に動作しますが、非同期の [Symbol.asyncDispose]() メソッドを呼び出すため、非同期のクリーンアップを実行できます。

async function run() {
  await using db = await connectDb();
  // db[Symbol.asyncDispose]() called on exit
}

デコレーターのメタデータ

TS 5.2 は TC39 のデコレーター・メタデータ提案を実装し、デコレーターから Symbol.metadata を通じてメタデータを付加できるようにします。

function meta(value: string) {
  return (_: unknown, ctx: DecoratorContext) => {
    ctx.metadata[ctx.name] = value;
  };
}

@meta("service")
class MyService {}
console.log((MyService as any)[Symbol.metadata]); // { "MyService": "service" }

配列のコピー用メソッド

TS 5.2 では、ES2023 で導入された不変な配列操作である Array.prototype.toSorted、toReversed、toSpliced、with の型が追加されました。

const arr = [3, 1, 2];
const sorted = arr.toSorted(); // [1, 2, 3] — new array, arr unchanged
const reversed = arr.toReversed(); // [2, 1, 3]

5.2 で tsconfig に Using を追加する

using 宣言を使用するには、tsconfig に esnext.disposable ライブラリを含めます。

{
  "compilerOptions": {
    "target": "ES2022",
    "lib": ["ES2022", "ESNext.Disposable"]
  }
}

まとめ: TS 5.1-5.2

TS 5.1: getter と setter の型の独立指定、undefined の JSX 戻り値。TS 5.2: リソースを自動的にクリーンアップする using 宣言、デコレーターのメタデータ、不変な配列コピー用メソッドの型。

理解度チェック

TypeScript 5.2 の using 宣言は何を行いますか?

学んだこと

TS 5.1 では getter と setter の型を独立して指定できるようになり、undefined の JSX 戻り値が導入されました。TS 5.2 では、リソースを自動管理する using 宣言、デコレーターのメタデータ、ES2023 の不変な配列メソッドの型が導入されました。

よくある質問

「TypeScript 5.1〜5.2:推論の改善」レッスンは無料ですか?

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

「TypeScript 5.1〜5.2:推論の改善」で何を学びますか?

SetterとGetterの型の独立性、およびusing宣言を確認します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「TypeScript 5.1〜5.2:推論の改善」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. TypeScript 5.0:標準デコレーターとconst型パラメーター
  2. TypeScript 5.1〜5.2:推論の改善
  3. TypeScript 5.3〜5.4:新しいナローイングとNoInfer
  4. TypeScript 5.5以降:Isolated Declarationsとその先
← TypeScript Academyに戻る