Diziler <Type> VS Type []


162

Bildiğim kadarıyla bir mülkiyet türü bir Array olduğunda iki şekilde tanımlanabilir.

property_name: type

burada tip ikisinden biri olabilir

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

ve

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

İki vaka arasındaki fark nedir ? Yoksa bir şeyi yanlış mı anlıyorum (dökümde kullanılan <> hakkında bir şey?)

EDIT soru yinelenen olarak işaretlendiğinden, herhangi bir [] hakkında başka bir soru olduğunu biliyorum ama yine de göndermeden önce bir göz vardı ve bana farklı [] VS <'herhangi bir' türü hakkında daha fazla oldu > Sordum


3

1
Pratik olarak aynı yapılardır ve çalışma zamanında etkili bir şekilde aynı nesnelerdir. Reflect-meta verileri , her ikisine de Arrayyapıcı olarak nesneye sahip olarak davranacaktır . Yukarıdaki bağlantılı cevaba bakınız.
John Weisz

3
@NitzanTomer bu soru güncel Array<T>değil - o zamanlar yoktu.
Nathan Shively-Sanders

Bu soru "arasındaki farkları indirgenebilir çünkü NathanShively-Sanders @ cevap veya jenerik olmadan aynıdır let x: Array;için let x: any[];"
Nitzan Tömer'de

Yanıtlar:


168

Anlamsal bir fark yok

Hiç fark yok. Type[]bir kestirme sözdizimi bir dizi için Type. Array<Type>olduğu genel sözdizimi . Tamamen eşdeğerdirler.

El kitabı burada bir örnek sunmaktadır . Yazmakla eşdeğerdir:

function loggingIdentity<T>(arg: T[]): T[] {
    console.log(arg.length);
    return arg;
}

Veya:

function loggingIdentity<T>(arg: Array<T>): Array<T> {
    console.log(arg.length);
    return arg;
}

İşte bazı sürüm notlarından bir alıntı :

Özellikle, number[]bir kestirme versiyonu Array<number>gibi, Date[]bir kısaltmadır Array<Date>.

Ancak, steno sözdiziminin gerekli olduğu bir durum vardır.

TypeScript 3.4'ten bu yana , yeni tür değiştirici için bir fark varreadonly . Aslında:

readonlytür değiştirici sadece bir dizi tipleri ve demet türlerinde sözdizimi için kullanılabilir

let err2: readonly Array<boolean>; // error!    
let okay: readonly boolean[]; // works fine

Ancak aşağıdaki beyan eşdeğerdir readonly boolean[]:

let okay2: ReadonlyArray<boolean>;

1
@dragonmnl, Genel bir türdür. El kitabındaki "Jeneriklerin Merhaba Dünyası" bölümünü okumanız yeterli .
Paleo

4
Resmi bir öneri yok. Ben sadece stenoyu ve sadece stenoyu ( type[]) kullanıyorum çünkü okumak daha kolay.
Paleo

2
Artık tamamen aynı değiller : typescriptlang.org/docs/handbook/release-notes/…
DShook

1
Eğer doğru yaparsam, readonlyaslında gerekli değilse. Uzun bir gösterim tercih ederseniz şöyle yazabilirsiniz:let err2: ReadonlyArray<boolean>;
n4nn31355

1
@ n4nn31355 Sanırım. Bu bildirimi eklemek için düzenledim.
Paleo

-10
foo: Array

yani anyüyeleri için örtük tipte düz bir dizi olduğu anlamına gelir

foo: string[]

dizeler dizisi olduğu anlamına gelir, yani dizeden başka bir şeyi bu diziye aktarmaya çalışırsanız TypeScript zihinsel olacaktır.


10
Soru Array vs string [] değil, Array <string> vs string [];
Juangui Jordán

Tuhaf, TypeScript parametresi olarak tanımlanan bir yönteme bir sayı dizisi geçirdiğimde akla gelmiyorfoo: string[]
jlewkovich 11:18

3
Bir sayı dizisi (fn ([1,2,3])) iletirseniz sorun olur. Bir değişkeni iletirseniz ve tür açık değilse, a = []; a = [1,2,3]; fn (a), o zaman sorun değil çünkü a herhangi bir tür []
Quentin 2
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.