Onun içinde blog post typescript hakkında Mark Rendle, öyle yaklaşık Sevdiği şeylerden Şunu söylüyor:
Arabirimler için yapısal yazarak. Gerçekten C # bunu isterdim
Bununla ne demek istedi?
Onun içinde blog post typescript hakkında Mark Rendle, öyle yaklaşık Sevdiği şeylerden Şunu söylüyor:
Arabirimler için yapısal yazarak. Gerçekten C # bunu isterdim
Bununla ne demek istedi?
Temelde, arabirimler, bir "ördek yazarak" temelinde ziyade bir tür kimlik bazında karşılaştırıldığında anlamına gelir.
Aşağıdaki C # kodu göz önünde bulundurun:
interface X1 { string Name { get; } }
interface X2 { string Name { get; } }
// ... later
X1 a = null;
X2 b = a; // Compile error! X1 and X2 are not compatible
Ve eşdeğer typescript kodu:
interface X1 { name: string; }
interface X2 { name: string; }
var a: X1 = null;
var b: X2 = a; // OK: X1 and X2 have the same members, so they are compatible
Spec çok ayrıntılı olarak ele alınmaktadır, ancak sınıflar yerine arayüzleri sınıflarıyla yazılı aynı kodu, anlamına gelen "marka" sahip olacağını bir hata var. C # arayüzleri markaları var ve bu yüzden örtülü dönüştürülemez.
Bunu düşünmek için kolay yolu arayüz X'ten bir dönüşüm deniyorsanız, Y arayüz ki X Y tüm üyelerini varsa, dönüşüm başarılı, X ve Y aynı adlara sahip olsa bile olduğunu.
Hakkında düşün.
class Employee { fire: = ..., otherMethod: = ...}
class Missile { fire: = ..., yetMoreMethod: = ...}
interface ICanFire { fire: = ...}
val e = new Employee
val m = new Missile
ICanFire bigGuy = if(util.Random.nextBoolean) e else m
bigGuy.fire
Ne dersem:
interface IButtonEvent { fire: = ...}
interface IMouseButtonEvent { fire: = ...}
...
Typescript bu sağlayacak, C # olmaz.
Typescript “gevşek” yazarak kullandığı DOM iyi çalışacak olmayı hedeflerken, bunun tek mantıklı daktilo için seçmektir.
Ben ... onlar “Yapısal yazarak” gibi karar vermek için okuyucuya bırakıyoruz ..