63 votes

L'élément a implicitement un type "tout" parce que le type "Fenêtre" n'a pas de signature d'index?

Je suis en train de créer une Usine de classe en caractères d'imprimerie, mais en cours d'exécution dans le message d'erreur suivant:

src/ts/classes/Usine.ts(8,10): erreur TS7017: Élément a implicitement un "tout" type car de type "Fenêtre", n'a pas d'indice de signature.

J'ai essayé de chercher pour cette erreur, mais je n'ai rien vu qui correspondait tout à fait ce que je suis désireux de le faire.

Ce qui suit est ma classe Usine.

/**
 * @class Factory
 *
 * @description Returns object based on given class string
 */
class Factory {
    public class(className: string): any {
        return window[className];
    }
}

Je préfère ne pas simplement supprimer implicite des erreurs dans le compilateur.

Toute suggestion ou aide serait grandement appréciée! Si ce n'est pas la meilleure façon d'aller à ce sujet, je suis vraiment ouvert à la modifier.

93voto

Thayne Points 1078

Une autre façon d’indexer sur une fenêtre, sans avoir à ajouter de déclaration, est de la convertir en type any :

 return (window as any)[className];
 

55voto

k0pernikus Points 2446

Le global window variable est de type Window. L' type Window n'a pas d' indice de la signature, par conséquent, la machine ne peut pas déduire le type d' window[yourIndex].

Pour votre code, vous pouvez ajouter cette interface à un non-fichier de module:

interface Window {
    [key:string]: any; // Add index signature
}

Notez que cela va permettre à tous l'accès à la propriété sur window, par exemple, window.getElmentById("foo") va cesser d'être une erreur due à la faute de frappe.

Note: en s'Appuyant sur la coutume modification de variables globales est de demander de troubles dans le long terme, vous ne voulez pas typehint juste pour any. Le point de l'ensemble de la machine consiste à faire référence à des types spécifiques. any devrait, au mieux, de ne jamais être utilisé. Vous ne devez pas toucher à l'espace de noms global et je conseille aussi contre en s'appuyant sur la fenêtre globale variable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X