2015-11-23 10 views
9

Ich habe Mühe, die Definition des &-Operators in TypeScript zu finden. Ich habe über den folgenden Code vor kurzem kommen:Typescript & Operator

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

Was bedeutet, dass Betreiber tun, und wie unterscheidet es sich von der Union-Typ |?

Antwort

18

Das sieht aus wie es aus dem Intersection Types Teil der Language Specification ist. Insbesondere scheint die & eine intersection type literal zu sein. Was das bedeutet:

Schnittpunkttypen repräsentieren Werte, die gleichzeitig mehrere Typen haben. Ein Wert eines Schnittpunkttyps A & B ist ein Wert, der sowohl vom Typ A als auch vom Typ B ist. Schnittpunkttypen werden unter Verwendung von Schnitttypliteralen (Abschnitt 3.8.7) geschrieben.

Die Spezifikation geht auf einen hilfreichen Schnipsel bieten besser das Verhalten zu verstehen:

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 

Da ab ist sowohl vom Typ Aund vom Typ B, wir es a zuweisen können und/oder b. Wenn ab nur vom Typ B wären, könnten wir ihn nur b zuweisen.

Der Code, den Sie freigegeben haben, kann von this comment on GitHub sein, die Intersection Typen erwähnt.