Generics
generics: 型引数は JavaScript 実行時には存在しない
TypeScript のジェネリクスはコンパイル時の仕組みであり、実行時には配列の要素型を判別できません。
SourceruntimeGenerics.ts
Node.js 22
export function runtimeConstructor(value: unknown): Function | undefined {
return typeof value === "object" && value !== null ? value.constructor : undefined;
}TestruntimeGenerics.test.ts
Node.js 22
import assert from "node:assert/strict";
import test from "node:test";
import { runtimeConstructor } from "../../src/generics/runtimeGenerics.js";
test("異なる型引数の配列は実行時に同じArrayとして見える", () => {
const strings: string[] = ["ts"];
const numbers: number[] = [1];
assert.strictEqual(runtimeConstructor(strings), runtimeConstructor(numbers));
assert.strictEqual(runtimeConstructor(strings), Array);
});01Assertion
このテストで確認できること
- string[] と number[] の実行時コンストラクタは同じ Array である
- 実行時入力は unknown と型ガードで安全に狭める
型引数に基づく実行時分岐を設計せず、判別用プロパティ、型ガード、スキーマ検証を使います。
OBSERVED RESULT
expected: strings.constructor === numbers.constructor → true
actual: true