TypeScript: Boş bir yazılan kapsayıcı dizisi oluşturma


185

TypeScript'te "Three of a Crime" adlı basit bir mantık oyunu oluşturuyorum.

TypeScript'te önceden ayrılmış yazılı diziyi denemeye çalışırken, böyle bir şey yapmaya çalıştım:

var arr = Criminal[];

"İfade teriminin biçimini kontrol et" hatası verdi.

bunu da denedi

var arr : Criminal = [];

ve bu "hiçbiri" [Cezai]

bunu yapmanın 'TypeScript' yolu nedir?

Yanıtlar:


169

Mevcut cevaplar bir seçeneği kaçırdı, bu yüzden tam bir liste:

// 1. Explicitly declare the type
var arr: Criminal[] = [];

// 2. Via type assertion
var arr = <Criminal[]>[];
var arr = [] as Criminal[];

// 3. Using the Array constructor
var arr = new Array<Criminal>();
  1. Değişken bildirimi için tür çıkarımının başarısız olduğu durumlarda, türün açıkça belirtilmesi genel çözümdür.

  2. Bir tür iddiası kullanmanın avantajı (bazen cast olarak adlandırılır, ancak gerçekten TypeScript'te bir cast değildir) herhangi bir ifade için işe yarar, bu nedenle herhangi bir değişken bildirilmediğinde bile kullanılabilir. Tür iddiaları için iki sözdizimi vardır, ancak bunu dikkate alırsanız yalnızca ikincisi JSX ile birlikte çalışır.

  3. Array yapıcısını kullanmak, yalnızca bu özel kullanım durumunda size yardımcı olacak, ancak kişisel olarak en okunabilir bulduğum bir şeydir. Ancak, çalışma zamanında * hafif bir performans etkisi vardır . Ayrıca, biri Array yapıcısını yeniden tanımlayacak kadar deliyse , anlam değişebilir .

Bu kişisel bir tercih meselesi, ancak üçüncü seçeneği en okunabilir buluyorum. Vakaların büyük çoğunluğunda, söz konusu dezavantajlar önemsiz olacaktır ve okunabilirlik en önemli faktördür.

*: Eğlenceli gerçek; yazma sırasında performans farkı Chrome'da% 60 iken, Firefox'ta ölçülebilir performans farkı yoktu.


% 60 ?? : O Çok vahşi
Max Coplan

239

TypeScript'te yazılan bir diziyi doğru şekilde ayırma sorunu, dizi değişmez sözdizimi nedeniyle biraz belirsizdi, bu yüzden ilk düşündüğüm kadar sezgisel değildi.

Doğru yol

var arr : Criminal[] = [];

Bu size 'arr' değişkeninde saklanan doğru yazılmış, boş bir dizi verecektir

Umarım bu başkalarına yardımcı olur!


20

Bu eski bir soru olduğunu biliyorum ama son zamanlarda belirli bir tür boş bir dizi dönmek zorunda kaldı, bu şekilde çözülemedi benzer bir sorunla karşı karşıya.

sahiptim

return [];

nerede []oldu Criminal[]türü.

Ne benim için ne return: Criminal[] [];de return []: Criminal[];işe yaradı.

İlk bakışta , geri dönmeden önce ( doğru bir şekilde rapor ettiğiniz gibi) yazılan bir değişken oluşturarak çözdüm , ancak (JavaScript motorlarının nasıl çalıştığını bilmiyorum) ek yük oluşturabilir ve daha az okunabilir.

Kapsamlı olmak için bu çözümü de cevabımda bildireceğim:

let temp: Criminal[] = [];
return temp;

Sonunda, sorunu daha özlü ve okunabilir (ve belki de verimli) bir şekilde çözmeme izin veren TypeScript türü döküm buldum:

return <Criminal[]>[];

Bu gelecekteki okuyuculara yardımcı olacağını umuyoruz!


1

Herkese açık erişim için aşağıdaki gibi kullanın:

public arr: Criminal[] = [];
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.