2017-12-10 2 views
1

In folgendem Beispiel Generika muß verwenden i generische Funktion:Warum ich in Typoskript

function Identity<T>(arg: T): T[] { 

    return arg; 
} 

ich meine Methode auf diese Weise schreiben:

function loggingIdentity(arg) { 
      return arg; 
    } 

Beiden Verfahren jede Art Wert annehmen kann und Rückkehr jeder Wert. Was ist der Vorteil der Verwendung von generischen für die obige Methode? in anderer Probe habe ich Generika verwendet, um eine Klasse zu erstellen:

class GenericNumber<T> { 
    zeroValue: T; 
    add: (x: T, y: T) => T; 
} 
let myGenericNumber = new GenericNumber<number>(); 
myGenericNumber.zeroValue = 0; 
myGenericNumber.add = function(x, y) { return x + y; }; 

I Klasse und neues Objekt ohne Verwendung von Generika erstellen:

class GenericNumber { 
     zeroValue; 
     add: (x, y); 
    } 
    let myGenericNumber = new GenericNumber(); 
    myGenericNumber.zeroValue = 0; 
    myGenericNumber.add = function(x, y) { return x + y; }; 

in c optional # -Sprache Typbestimmung ist obligatorisch, aber in Typoskript ist und Wir können eine Eigenschaft oder Variable oder einen Parameter ohne Typbestimmung deklarieren und sie können von jedem Typ sein.

Ich würde mich freuen, wenn mir jemand Bedeutung und alle Vorteile der Verwendung von generischen in Typoskript beschreiben würde.

+2

Sie können "Any" überall in TypeScript verwenden. Aber dann verwenden Sie grundsätzlich JavaScript und haben keine Typsicherheit mehr, weshalb TypeScript überhaupt existiert. Ist es nicht schön, dass die IDE Ihnen sagt, was ein Array enthalten soll, und sich weigert, Sie einen String in ein Array zu schieben? –

Antwort

5

In allen Beispielen T kann jede Art sein, aber alle T s sind vom gleichen Typ. Das ist wichtig: Betrachten wir Ihre Klasse GenericNumber. Es verfügt über eine add-Methode, die zwei Argumente vom Typ T akzeptiert und eine T zurückgibt. Dies könnte ein add(x:number, y:number):number oder ein add(x:string, y:string):string sein - aber niemals ein add(x:string, y:Foo):boolean.

Auch der Typskript-Compiler wird wissen, dass, wenn Sie zwei number s übergeben, die Funktion auch eine number zurückgibt. Dies kann wertvolle Information auf der Callsite der Funktion sein.

Ich empfehle auch, lesen Sie die chapter on generics in the typescript handbook - der erste Abschnitt "Hallo World of Generics" im Grunde beantwortet Ihre Frage.

Verwandte Themen