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@5Stage 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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- TypeScript 5.0:標準デコレーターとconst型パラメーター
- TypeScript 5.1〜5.2:推論の改善
- TypeScript 5.3〜5.4:新しいナローイングとNoInfer
- TypeScript 5.5以降:Isolated Declarationsとその先