2015-11-02 15 views
6

Döngü içinde bir üçlü operatörde bir TypeScript tipi bekçi kullanıyorum ve anlamadığım bir davranış görüyorum.TypeScript type guard Oddity

Benim arayüzleri

interface INamed { 
    name: string; 
} 

interface IOtherNamed extends INamed { 
    otherName: string; 
} 

My tip bekçi

function isOther(obj: any): obj is IOtherNamed { 
    ... // some check that returns boolean 
} 

Genel Kullanım Numune

var list: Array<{named: INamed}> = []; 

for(let item of list) { 
    var other: IOtherNamed = ... 
} 

İçimdeki döngüsümde, geçerli nesneyi veya null değerini IOtherNamed değişkenine atamak için tip korumamı kullanıyorum.

Bu Bu

for(let item of list) { 
    var named: INamed = item.named; 
    var other2: IOtherNamed = isOther(named) ? named : null; 
} 

Benim Sorular

  1. bu bu eserlerin bir wh tasarımdan mı yapar

    // Compiler Error: INamed is not assignable to IOtherNamed 
    for(let item of list) { 
        var other: IOtherNamed = isOther(item.named) ? item.named : null; 
    } 
    

    çalışmıyor ile diğer değil?

  2. Tasarım gereği, ne zaman çalıştığını belirleyen nüans nedir? Özellikle de, nesnemi yeni bir değişkene (herhangi bir değişiklik olmadan) atamak neden derleyici hatasından kurtuluyor?

cevap