1. ホーム
  2. types

[解決済み] TypeScriptの型定義におけるアンパサンド(&)の意味とは?

2022-09-10 14:57:56

質問

の60359行目で この型定義ファイル には、次のような宣言があります。

type ActivatedEventHandler = (ev: Windows.ApplicationModel.Activation.IActivatedEventArgs & WinRTEvent<any>) => void;

は何を意味しているのでしょうか? & の記号は、この文脈では何を意味するのでしょうか?

どのように解決するのですか?

& をタイプポジションにすると 交差点 の型を意味します。

交差点タイプに関するtypescript docsからの詳細。

https://www.typescriptlang.org/docs/handbook/2/objects.html#intersection-types

上記リンク先のドキュメントからの引用です。

交差型はunion型と密接に関係していますが、その使い方は非常に異なります。交差型は複数の型を1つにまとめます。これにより、既存の型を足して、必要な機能をすべて備えた1つの型を得ることができます。例えば、Person & Serializable & Loggableは、PersonとSerializableとLoggableのすべてを備えた型です。つまり、この型のオブジェクトは、3つの型のすべてのメンバを持つことになります。

例えば、一貫したエラー処理を行うネットワークリクエストがあった場合、エラー処理をそれ自身の型に分離し、単一のレスポンスタイプに対応する型と統合することができます。

interface ErrorHandling {
  success: boolean;
  error?: { message: string };
}

interface ArtworksData {
  artworks: { title: string }[];
}

interface ArtistsData {
  artists: { name: string }[];
}

// These interfaces are composed to have
// consistent error handling, and their own data.

type ArtworksResponse = ArtworksData & ErrorHandling;
type ArtistsResponse = ArtistsData & ErrorHandling;

const handleArtistsResponse = (response: ArtistsResponse) => {
  if (response.error) {
    console.error(response.error.message);
    return;
  }

  console.log(response.artists);
};