TypeScript类型定义中的&符号(&)是什么意思?

bbuxkriu  于 2023-06-30  发布在  TypeScript
关注(0)|答案(2)|浏览(208)

this type definition file的第60359行,有以下声明:

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

&符号在此上下文中是什么意思?

0g0grzrc

0g0grzrc1#

&在类型位置表示 * 交集 * 类型。

更多关于交集类型的typescript文档:

https://www.typescriptlang.org/docs/handbook/2/objects.html#intersection-types
引用自上面链接的文档:
交集类型与联合类型密切相关,但它们的使用方式非常不同。交叉点类型将多个类型组合为一个。这允许您将现有类型添加到一起,以获得具有所需所有特性的单个类型。例如,Person & Serializable & Loggable是一个类型,它是Person、Serializable和Loggable的全部。这意味着此类型的对象将具有所有三种类型的所有成员。
例如,如果您有具有一致错误处理的网络请求,那么您可以将错误处理分离到它自己的类型中,该类型与对应于单个响应类型的类型合并。

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);
};
nqwrtyyt

nqwrtyyt2#

Typescript中的交集类型

  • 在类型的上下文中,TS中的A &表示交集类型。
  • 它将两个对象类型的所有属性合并在一起并创建一个新类型
    示例:
type dog = {age: number, woof: Function};
type cat = {age: number, meow: Function};

// Type weird is an intersection of cat and dog
// it needs to have all properties of them combined
type weird = dog & cat;

const weirdAnimal: weird = {age: 2, woof: () => {'woof'}, meow: () => {'meow'}}

interface extaprop {
    color: string
}

type catDog = weird & extaprop; // type now also has added color
const weirdAnimal2: catDog = {age: 2, woof: () => {'woof'}, meow: () => {'meow'}, color: 'red'}

// This is different form a union type
// The type below means either a cat OR a dog
type dogOrCat = dog | cat;

相关问题