kontrol yazmayın ve çek yazmak için başarısız aşağıdaki zaman biraz karışık oldu:Arayüzler ben daktilo yapı imzalarla arayüzlerle biraz çalıyorum
class Foo {
constructor() {
}
}
interface Bar {
new(): Bar;
}
function Baz(C : Bar) {
return new C()
}
var o = Baz(Foo);
türü hatası olduğunu :
Sağlanan parametreleri çağrı hedefinin herhangi imza eşleşmiyor: Türü 'Bar' bir yapı imzasını gerektirir, ancak Tip: türleri 'yeni() => Foo' ve 'Bar' olan uyumsuz imzaları Construct 'Foo' eksikliği s bir (C: Bar) => Bar
Foo'nun yapıcısının türü() => Foo'dur ve Bar'ın söylediği şey budur. Burada bir şey mi eksik?
'Herhangi birini kullanmak yerine süper bir arabirim kullanırsınız ("implements" ve "extends", btw). Tamam, sanırım, ve herşeyden daha iyi, ama bir şey hala beni rahatsız ediyor: Neden NewableBar :: new() '' NewableBar'ı döndürmeye izin veremiyorsun? Neden "NewableBar" dan daha genel bir ** (ve tabii ki en azından Foo gibi jenerik) olan bir tür olmak zorundadır? –
@AdrianLang Açık olması için açık miras ve uygulamalara koydum, ama siz haklısınız - TypeScript, her şey eşleşirse bunları mutlu bir şekilde çıkaracaktır. Belirli bir türdeki bir yönteme ilişkin 'new()' imzasını işlemeye çalışırken bir yorumlama sorunu vardır. – Fenton
Ancak, Foo'ya herhangi bir şey eklemeye çalıştığınızda bu kırılır. Düzenleme: Üzgünüm, yanlış yapıyordum. Yapım imzam şöyle olmalıdır: 'new (... _: any []): Bar;' – farre