Typescript & operator


Jeg sliter med å finne definisjonen av &-operatoren i TypeScript. Jeg har nylig kommet over følgende kode:

type IRecord<T> = T & TypedMap<T>;

Hva gjør den operatoren, og hvordan er den forskjellig fra unionstypen |?

Svar #1

Dette ser ut som det er fra delen Intersection Types av språkspesifikasjonen. Spesielt er & et intersection type-litteral. Når det gjelder hva det gjør:

Interseksjonstyper representerer verdier som samtidig har flere typer. En verdi av en interseksjonstype A & B er en verdi som både er av type A og type B. Interseksjonstyper skrives ved bruk av interseksjonstype-literal (seksjon 3.8.7).

Spesifikasjonen fortsetter med å tilby et nyttig utdrag for å bedre forstå oppførselen:

interface A { a: number }  
interface B { b: number }

var ab: A & B = { a: 1, b: 1 };  
var a: A = ab;  // A & B assignable to A  
var b: B = ab;  // A & B assignable to B

Fordi ab er både av typen A og av typen B, kan vi tilordne det til a og/eller b. Hvis ab bare var av typen B, kunne vi bare tilordne det til b.

Koden du delte kan være fra denne kommentaren på GitHub, som nevner krysstypinger.

Svar #2

Verdt å merke seg at hvis du foretrekker å bruke grensesnitt fremfor typer (selv om de stort sett er like) kan du vanligvis bruke grensesnittutvidelse i stedet for typeinterseksjon slik som dette:

// base type
interface Shape {
  color: string;
}

// extension
interface Square extends Shape {
  sideLength: number;
}

// intersection
type Square = Shape & {
  sideLength: number;
}

Se også: Forskjellen mellom å utvide og å kryssende grensesnitt i TypeScript?

Relaterte artikler