Daktilo "Arayüz için yapısal Yazma" nedir

oy
17

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?

Oluştur 04/10/2012 saat 06:08
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
18

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.

Cevap 04/10/2012 saat 06:29
kaynak kullanıcı

oy
1

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 ..

Cevap 12/02/2014 saat 16:40
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more