declare const __brand: unique symbol; type Brand<T, B extends string> = T & { readonly [__brand]: B }; type PersonId = Brand<number, 'PersonId'>; type CardId = Brand<number, 'CardId'>; type CardHeaderEl = Brand< ReactElement<CardHeaderProps>, 'CardHeader' >; 2. 関数コンポーネントへの適用 function CardHeader(p: HeaderProps) { return ( <header><h2>{p.title}</h2></header> ) as unknown as CardHeaderEl; } ポイント: - 関数の戻り値を CardHeaderEl にキャスト - これにより JSX.Element ではなく 特定の型として保持される - 構造的な型の安全性を担保することが 可能になる