typescript - 'Window' türünün bir indeks imzası olmadığı için eleman örtük olarak 'any' türüne sahip mi?
Typescript'te bir Fabrika sınıfı oluşturmaya çalışıyorum, ancak aşağıdaki hata ile karşılaşıyorum:
src/ts/classes/Factory.ts(8,10): hata TS7017: Eleman, tipi 'Window' bir indeks imzasına sahip olmadığı için örtük olarak 'any' türüne sahiptir.
Bu hatayı aramayı denedim, ama yapmak istediğim şeyle tam olarak eşleşen bir şey göremedim.
Aşağıda benim Fabrika sınıfım bulunmaktadır.
/**
* @class Factory
*
* @description Returns object based on given class string
*/
class Factory {
public class(className: string): any {
return window[className];
}
}
Derleyicide örtük hataları sadece bastırmayı tercih etmem.
Herhangi bir öneri veya yardım çok takdir edilir! Bunu yapmanın en iyi yolu bu değilse, kesinlikle değiştirmeye de açığım.
Cevap #1
Bir bildirim eklemeden pencerede indeksleme yapmanın bir diğer yolu, onu any türüne dönüştürmektir:
return (window as any)[className];
Cevap #2
Küresel window değişkeni type Window türündedir. type Window bir index imzasına sahip olmadığından, TypeScript window[yourIndex] ifadesinin türünü çıkaramaz.
Kodunuzun geçmesi için bu arayüzü bir modül olmayan dosyaya ekleyebilirsiniz:
interface Window {
[key:string]: any; // Add index signature
}
Bunun, window üzerinde herhangi bir özelliğe erişime izin vereceğini unutmayın, örneğin window.getElmentById("foo") yazım hatası nedeniyle artık bir hata olarak görülmeyecektir.
Not: Uzun vadede özelleştirilmiş global değişkenlere güvenmek sorun istemek anlamına gelir, ayrıca sadece any için typehint kullanmak da istemezsiniz. TypeScript'in tüm amacı belirli türlere referans vermektir. any en iyi ihtimalle hiç kullanılmamalıdır. Global isim alanıyla uğraşmamalısınız ve global window değişkenine güvenmenizi de tavsiye etmiyorum.
