2016-04-25 14 views
50

Per quanto ne so, il tipo di una proprietà può essere definito in due modi quando si tratta di una matrice.Array <Type> Tipo VS [] in Typescript

property_name: type 

dove tipo può essere sia

Array<string>, ,Array<MyType>, etc. (e.g. let prop1: Array<string>) 

e

string[], MyType[], etc. (e.g. let prop1: string[]) 

Qual è la differenza tra i due casi? O sto sto equivoco qualcosa (forse qualcosa su <> utilizzato nella fusione?)

EDIT in quanto la questione come contrassegnato come duplicato, sono consapevole c'è l'altra domanda circa c'è [], ma ancora ho avuto uno sguardo a esso prima di pubblicare e per me è stato di più sul tipo di 'qualsiasi' rispetto alla diversa [] VS <> ho chiesto

+3

Possibile duplicato di [Array tipografico rispetto a qualsiasi \ [\]] (http://stackoverflow.com/questions/15860715/typescript-array-vs-any) –

+1

Sono praticamente gli stessi costrutti e sono effettivamente uguali oggetti in fase di esecuzione. [Reflect-metadata] (https://github.com/rbuckton/ReflectDecorators) li tratterà entrambi come aventi l'oggetto 'Array' come loro costruttore. Vedi la risposta collegata sopra. –

+2

@NitzanTomer quella domanda non è aggiornata - 'Array ' non esisteva al momento. –

risposta

34

Non c'è differenza. E 'equivalente a scrivere:

function loggingIdentity<T>(arg: T[]): T[] { 
    console.log(arg.length); // Array has a .length, so no more error 
    return arg; 
} 

Oppure:

function loggingIdentity<T>(arg: Array<T>): Array<T> { 
    console.log(arg.length); // Array has a .length, so no more error 
    return arg; 
} 

Fonte: the Handbook.

+0

grazie per la risposta. potresti chiarire che cosa è esattamente il in loggingIdentity ? – dragonmnl

+0

@dragonmnl, è un tipo generico. Basta leggere la sezione "Hello World of generic" in [the Handbook] (http://www.typescriptlang.org/docs/handbook/generics.html). – Paleo

+0

Penso che siamo tutti d'accordo sul fatto che non ci sono differenze funzionali, ma ci sono state raccomandazioni su quale sia lo stile preferito? – chrismarx

-1
foo: Array 

significa che si tratta di un array di pianura, con una any tipo implicito per i suoi membri

foo: string[] 

significa che si tratta di un array di stringhe, ad esempio TypeScript diventerà mentale se si prova a inserire qualcosa di diverso dalle stringhe in quell'array.

+3

La domanda era Array vs stringa [], non matrice vs stringa []; –

+0

È strano, a TypeScript non sembra importare quando passo una serie di numeri a un metodo con parametro definito come "foo: string []' – JLewkovich

+1

Se passi una matrice di numeri, fn ([1,2,3]), quindi non importa. Se passi una variabile e il tipo non è esplicito, lascia a = []; a = [1,2,3]; fn (a), quindi non importa perché un tipo è qualsiasi [] –