javascript nesnelerinin dizisini sırala, typescript hatası
İki sorum var, biri angular-cli'nin transpile ederken birkaç kez fark ettiğim bir davranışla ilgili... ve ikincisi bir dizi sıralama sorusu, bu da birinci soruyu tetikliyor.
Sıralamaya çalıştığım dizi şöyle bir şey görünüyor - buna BİR DİZİ ŞEYLER diyelim:
[{
label : string,
primary: boolean
}]
Temelde, değerleri true, false veya null olan boolean doğasında bir 'primary' alanı olan bir etiket. Boolean TRUE olanların önce, boolean FALSE olanların sonra ve NULL olanların en son olacak şekilde sıralama yapmak istiyorum. Her gruptaki etiketler alfabetik olacak şekilde.
Sadece basit bir JS dizi sıralaması yapmak istedim - TS'ye gerek yok -
this.user.things.sort( function(a, b){ return b.primary > a.primary} );
Yani editörüm bana TS hataları konusunda uyarıyor... ki ben onları görmezden geliyorum, çünkü kod çalışıyor.
[ts] '(a: ThingModel, b: ThingModel) => boolean' türündeki argüman, '(a: ThingModel, b: ThingModel) => number' türündeki parametreye atanamaz. 'boolean' türü, 'number' türüne atanamaz.
Sanırım Soru 2 ile başlamalıyım, çünkü aynı hata derleme zamanında ortaya çıkıyor.
bu sıradan JS olmasına rağmen - ben çizgili satırları ve transpile sırasında kırmızı hataları görmek istemiyorum.
Soru 2: Bunu TS uyumlu hale nasıl getirebilirim?
ve sonra, transpile ettiğimde - hata almama rağmen - birkaç saniye sonra - "başarıyla derlendi" mesajını alıyorum - ve site sorunsuz çalışıyor.
Soru 1: Biri bana - veya beni belgelere yönlendirebilir mi - transpiler hakkında ve hangi hataların ölümcül (fatal) sayıldığını - başlatılamama (no-start) hataları ve hangi hataların bu hata gibi davranacağını, yani kırmızı bir hata veriyor ama yine de derlemeyi tamamlıyor ve kod çalışıyor gibi davranacağını açıklayabilir mi? Bu, bir hatayı çözmekten ziyade daha çok eğitim amaçlı bir soru. Ama bunu anlamak isterim.
Teşekkürler.
Cevap #1
boolean değeri değil, number değerini döndürmeniz gerekiyor
this.user.things.sort(function (a, b) {
return a.primary < b.primary ? 1 : a.primary > b.primary ? -1 : 0;
});
Şimdi herhangi bir uyarı veya hata vermeyecek.
Cevap #2
Sadece ikinci değer ile birinci değer arasındaki farkı döndürebilirsin.
Karşılaştırma operatörlerinin kullanımı, eksi operatörünün kullanımına benzer şekilde örtük bir tür dönüşümü gerçekleştirir.
var array = [false, true, true, false, false, true];
array.sort((a, b) => b - a);
console.log(array);