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?
