📦 インターフェース(interface)
// オブジェクトの形を定義
interface User {
  id: number;
  name: string;
  email?: string;  // ? = オプショナル(なくてもOK)
}

const user: User = { id: 1, name: "たろう" };

// 関数のインターフェース
interface Greeter {
  (name: string): string;
}
const greet: Greeter = (name) => `Hello, ${name}!`;
🔧 ジェネリクス(Generics)
// 型を引数として受け取る汎用関数
function first<T>(arr: T[]): T {
  return arr[0];
}

console.log(first<number>([1, 2, 3]));  // 1
console.log(first<string>(["a", "b"])); // "a"

// 型推論により型引数を省略することも可能
console.log(first([true, false])); // true