typescript - var beyan etmek undefined hatasına yol açıyor
Ben bir TypeScript acemisi olarak, bazı değişiklikler yapmak için mevcut bir Durandal projesini üstleniyorum. Bu kod parçasının çalışma zamanı hatası verdiğini fark ettim.
declare var routeLinks: IRouteLinks;
routeLinks = new RouteLinks();
export = routeLinks;
Hata=Kök modül yüklenemedi (ui/shell). Detaylar: routeLinks tanımlı değil(…)
Ancak, declare anahtar kelimesini kaldırmak için kodu değiştirdiğimde (aşağıda), sorun ortadan kalkıyor ve kod beklenildiği gibi çalışıyor gibi görünüyor.
var routeLinks: IRouteLinks;
routeLinks = new RouteLinks();
export = routeLinks;
Bu desen, birçok yerde tekrar ediliyor; her seferinde bir çalışma zamanı istisnası aldığımda, declare anahtar kelimesini kaldırıyorum ve sorun düzeliyor.
- Biri
declareanahtar kelimesini eklemenin bu soruna neden olduğunu ve onu kaldırmanın neden problemi çözdüğünü açıklayabilir mi? - Bu bağlamda
declarekullanmanın olası amacı neydi, mümkünse yeni başlayanlar için açıklayabilir misiniz? - Ve eğer bu kod daha önce çalışıyorduysa, neden benim kutumda başarısız oluyor? (Typescript veya Durandal sürümleri arasında kırıcı değişiklikler olabilir mi?)
Teşekkürler.
Daha Fazla Bilgi
Bunu daha fazla incelediğimde, derlenmiş js'i karşılaştırdığımda, declare anahtar kelimesini kullandığımızda bu satırın eksik olduğunu görüyorum
var routeLinks;
Yani hata şimdi benim için daha anlamlı, ama neden declare kullanmak çapraz derleyicinin değişken beyanını atlamasına neden oluyor, bu mantığa aykırı görünüyor.
Cevap #1
declare anahtar kelimesinin arkasındaki fikir, derleyiciye bir değişkenin (veya sınıf, fonksiyon vb.) kod çalışma ortamına yüklendiğinde var olacağını söylemektir.
Bu, örneğin beyan dosyaları bulunmayan kütüphaneleri kullanırken faydalıdır.
Örneğin, aşağıdaki kod:
declare var VERSION: string;
console.log(`loaded version: ${VERSION}`);
Şuna derlenir:
console.log("loaded version: " + VERSION);
Bununla birlikte:
var VERSION: string;
console.log(`loaded version: ${VERSION}`);
Şuna derlenir:
var VERSION;
console.log("loaded version: " + VERSION);
declare anahtar kelimesi kullanıldığında derleyici onu görmezden gelecek ve oluşturulan js dosyasına çıkış olarak üretmeyecektir.
Sizin durumunuzda değişken muhtemelen çalışma zamanında tanımlı değil, bu yüzden declare ifadesini kaldırdığınızda hata almıyorsunuz.
Bunu burada daha fazla okuyabilirsiniz: Hızlı İpucu - TypeScript Declare Anahtar Kelimesi
