0Pricing
TypeScript Academy · レッスン

TypeScript 5.0:標準デコレーターとconst型パラメーター

新しいデコレーター提案とconstジェネリックパラメーターを使います。

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

TypeScript 5.0の概要

TypeScript 5.0では、標準化されたTC39デコレーター提案(Stage 3)、const型パラメーター、新しいverbatim module構文、パフォーマンスの大幅な向上が導入されました。

// TS 5.0 release: March 2023
// npm install typescript@5

Stage 3デコレーター

TS 5.0は、公式のTC39 Stage 3デコレーター提案を実装しています。これは従来の実験的なデコレーターとは異なり、experimentalDecorators: trueは不要になりました。

// New standard decorator — no experimentalDecorators flag needed
function logged(target: Function, ctx: ClassDecoratorContext) {
  return class extends (target as any) {
    constructor(...args: any[]) {
      console.log("Creating", target.name);
      super(...args);
    }
  };
}

@logged
class User { constructor(public name: string) {} }

デコレーターコンテキストオブジェクト

新しいデコレーターは、デコレートされた要素に関するメタデータを持つ、型付けされたClassDecoratorContextまたはMethodDecoratorContextオブジェクトを受け取ります。

function sealed(_: Function, ctx: ClassDecoratorContext) {
  ctx.addInitializer(function(this: any) {
    Object.seal(this);
  });
}

TS 5.0のメソッドデコレーター

メソッドデコレーターは、古い(target, key, descriptor)シグネチャに代わり、メソッドとClassMethodDecoratorContextを受け取ります。

function measure(_: Function, ctx: ClassMethodDecoratorContext) {
  return function(this: any, ...args: any[]) {
    const start = performance.now();
    const result = (_.apply as any)(this, args);
    console.log(ctx.name, performance.now() - start, "ms");
    return result;
  };
}

const型パラメーター

型パラメーターにconstを付けると、TypeScriptは引数をベース型へ拡大せず、リテラル型として推論します。

function identity<const T>(val: T): T { return val; }
const a = identity("hello");      // type: "hello" (not string)
const b = identity([1, 2, 3]);    // type: readonly [1, 2, 3]

constジェネリクスとas constの比較

const型パラメーターは絞り込みの効果を自動的に適用するため、呼び出し側で呼び出しごとにas constを追加する必要がありません。

// Without const param: callers need as const
function makeRoute<T extends string>(path: T) { return path; }
const r1 = makeRoute("/home" as const); // "/home"

// With const param: automatic
function makeRoute2<const T extends string>(path: T) { return path; }
const r2 = makeRoute2("/home"); // "/home" — no as const needed

バンドラーのモジュール解決

TS 5.0では、Viteやesbuildなど、モジュール解決を自身で処理するバンドラーを使うプロジェクト向けにmoduleResolution: "bundler"が追加されました。

{
  "compilerOptions": {
    "module": "ESNext",
    "moduleResolution": "bundler"
  }
}

verbatimModuleSyntax

verbatimModuleSyntax: trueを指定すると、型のみのインポートでimport typeを使うことが強制され、実行時の不要なインポート漏れを防げます。

// tsconfig.json
{ "compilerOptions": { "verbatimModuleSyntax": true } }

// Now this errors: must be import type
import { User } from "./types"; // Error if User is only a type
import type { User } from "./types"; // OK

パフォーマンスの向上

TS 5.0では、型のインスタンス化のキャッシュと絞り込みのパフォーマンスが向上し、コードを変更しなくても大規模なプロジェクトが高速化されます。

# TS 5.0 compile benchmarks: ~10-15% faster on large projects

従来のデコレーターからの移行

従来のexperimentalDecoratorsも引き続き動作しますが、将来的には非推奨になる予定です。将来の互換性のため、TC39デコレーターへ移行しましょう。

// Legacy: requires experimentalDecorators: true
@Component({ selector: "app-root" })
class AppComponent {}

// New TC39 decorator: no flag needed (but Angular/NestJS need updates)

まとめ:TypeScript 5.0

TypeScript 5.0では、TC39標準デコレーター、リテラル型を自動的に推論するconst型パラメーター、moduleResolution: "bundler"、verbatimModuleSyntax、そして大幅なパフォーマンス向上が導入されました。

確認問題

型パラメーターにconstを付けると、何が起こりますか?

学んだこと

TypeScript 5.0では、標準のTC39デコレーターが実験的なデコレーターに置き換わり、const型パラメーターによって引数がリテラル型へ自動的に絞り込まれます。moduleResolution: "bundler"は最新のビルドツールをサポートし、verbatimModuleSyntaxはimport typeを強制します。

よくある質問

「TypeScript 5.0:標準デコレーターとconst型パラメーター」レッスンは無料ですか?

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

「TypeScript 5.0:標準デコレーターとconst型パラメーター」で何を学びますか?

新しいデコレーター提案とconstジェネリックパラメーターを使います。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「TypeScript 5.0:標準デコレーターとconst型パラメーター」レッスンにはどのくらい時間がかかりますか?

ほとんどの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に戻る