Anders Hejlsberg provided folgende Gründe:
Es ist möglich, primitive Typen zu schneiden (z string & number
), aber es ist nicht möglich, tatsächlich Werte solcher Typen zu erstellen (außer undefined
). Da solche Typen aus der Instanziierung von generischen Typen resultieren können (was träge durchgeführt wird), ist es nicht möglich, die Operationen, die die Typen erzeugen, konsistent zu erkennen und Fehler zu finden.
Er sagte auch, in einem Kommentar am 3. Juli 2015:
Ein Schnitttyp konstituierende Typen Typ Parameter sein kann. So können Sie schreiben
declare function combine<T, U>(obj1: T, obj2: U): T & U;
Das fügt wichtige neue Ausdruckskraft hinzu und erlaubt uns, vorhandene JS Redewendungen besser zu modellieren. Da jedoch Typparameter mit beliebigen Argumenten des Typs instanziiert werden können, können wir nicht vorab überprüfen, ob ein Schnittstellentyp "gültig" ist. Stattdessen müssen wir bereit sein, alle Typen zu schneiden und "Fehler" als Typen auftauchen lassen, für die keine Werte möglich sind (z. B. string & number
). Sie könnten argumentieren, dass wir Fehler bei der Instantiierung eines solchen Typs haben sollten, aber die Instanziierung eines Typs in einem System vom Typ polymorph ist stark verzögert (dh es geschieht "just in time"), um eine Typexplosion zu vermeiden, und unsere Fehlerberichte würden praktisch unbestimmt werden Wir sind auf diese Weise gegangen.