2016-03-21 41 views
2

Typescript'te, bunun ne anlama geldiğini bilen var mı? Ardından this.id için boş atamak, aksi halde, obj.id atamakTypeScript constructor sözdizimi

O (obj boş değil) eğer gibi görünüyor ve (obj.id sahiptir değer): Burada

constructor(obj?:any){ 
    this.id = obj && obj.id || null; 
} 

benim tahmin nedir? ?

15-20 civarında yer buldum (siteler/belgeler), ancak yine de cevabı bulamıyorum. Ben sadece TypeScript öğrenmeye başladığım için üzgünüm. Herhangi bir iyi referansı bilen var mı? Yardımlarınız için şimdiden teşekkür ederiz!

cevap

4

Sezginiz iyidir! Özet şu şekildedir: JavaScript'teki Boole olmayan türlerdeki if, &&, and || gibi operatörler, bu türlerin Boole olarak değerlendirilmesine neden olur. En yaygın olarak, bir şey null (false) veya bir nesne (true) olup olmadığını anlamaya yardımcı olmak için kullanılır.

truthyValue && obj'un obj, true'u vermeyeceğini unutmayın, böylece sözdizimi null-coalescing için kullanışlıdır. örneğin: name = mightBeNull && mightBeNull.name.

olurdu bu kurucu yazmak için daha çok sözlü yolu:

if (obj) { 
    this.id = obj.id; 
} 
else { 
    this.id = null; 
} 

Bir kod tarzı konunun şey - kesinlikle niyet ne kadar net, ama birçok deneyimli JavaScript programcıları arasında olduğunuzda, Tamamen kendi kendini belgeleyen rutin kalıpları değil, insanların kullandıkları kalıplarla kısa kodları tercih etmeleri mantıklı olabilir. Daha ayrıntılı bir şekilde 'obj.id` için bir çek içermelidir:

+1

Minör noktası (Son olarak, yukarıdaki açıklama JavaScript ve typescript da eşit olarak mahsus dikkat edin). Görmek için orijinal kodu ve bu ayrıntılı kodu 'obj = {id: undefined}' kullanarak karşılaştırın. Orijinalde, "null" olacak ve bu da "undefined" olacaktır. Veya 'obj = {id: false} '...' yı kontrol edin, orijinal 'null' ve bu 'false' olacaktır. –

+0

Yapmaya çalıştığınız noktayı anlıyorum. Ama 'null && obj' her zaman size 'null' verecektir. – Dave

+0

@Dave Bu doğru - Örneği güncelledik. – Katana314