interfacesadece bir nesnenin şeklini tanımlamak istediğiniz zamanlar içindir. Arayüzler için hiçbir zaman kod üretimi yoktur - bunlar yalnızca tür sistemindeki bir yapıdır. Bir implementscümlesi olup olmamasına bağlı olarak, bir sınıf için kod oluşturmada hiçbir fark görmeyeceksiniz .
declare classharici olarak mevcut olacak mevcut bir sınıfı (genellikle bir TypeScript sınıfı, ancak her zaman değil) tanımlamak istediğinizde kullanılır (örneğin, iki .js dosyası olarak derlenen ve her ikisi de scriptetiketler aracılığıyla dahil edilen iki .ts dosyanız vardır bir web sayfasında). Eğer bir devralan varsa classkullanılarak extends(bakılmaksızın baz tipi bir olup olmadığı declare classveya düzenli classderleyici prototip zinciri ve yönlendirme kurucular ve ne değil kanca tüm kodu oluşturmak için gidiyor).
declare classArayüz olması gereken bir cihazdan devralmaya çalışırsanız , bir çalışma zamanı hatası alırsınız çünkü üretilen kod, çalışma zamanı belirtisi olmayan bir nesneye atıfta bulunacaktır.
Tersine, basitçe implementbir arayüz olması gereken bir arabirimseniz, declare classtüm üyeleri kendiniz yeniden uygulamanız gerekecek ve olası temel sınıftan ve işlevlerden herhangi bir kodun yeniden kullanımından yararlanamayacaksınız. çalışma zamanında prototip zincirinin kontrol edilmesi, aslında temel sınıfın bir örneği olmadığı için nesnenizi reddeder.
Gerçekten inek olmak için, eğer bir C ++ arka planınız varsa, kabaca bu derleme biriminde bir tanımı kesinlikle bulunmayan bir kurucu beyanı interfaceolarak typedefve declare classolarak düşünebilirsiniz extern.
Saf bir tüketim taraftan, arasındaki tek fark (değil yeni türlerini ekleme, zorunlu kod yazmak) interfaceve declare classbir yapamazsın ki newbir arayüz. Eğer niyetinde Ancak, extend/ implementyeni bu türlerinden biri class, kesinlikle arasındaki doğru seçmiş zorunda interfaceve declare class. Sadece biri çalışacak.
Size iyi hizmet edecek iki kural:
- Türün adı,
newaslında çalışma zamanında mevcut olan (örneğin Date, ama JQueryStaticdeğil) bir yapıcı işleviyle (çağrılabilir bir şey) hizalı mı? Eğer hiçbir , kesinlikle istiyoruminterface
- Başka bir TypeScript dosyasından derlenmiş bir sınıfla mı yoksa yeterince benzer bir şeyle mi uğraşıyorum? Eğer evet , kullanım
declare class