Je sais que la question est déjà fermée, mais je l'ai trouvée à la recherche de la même exception TypeScriptException, peut-être que quelqu'un d'autre a rencontré cette question à la recherche de ce problème.
Le problème réside dans la saisie TypeScript manquante:
var coordinates = outerElement[0].getBBox();
Jette The property 'getBBox' does not exist on value of type 'HTMLElement'.
Le moyen le plus simple consiste à taper explicitement la variable comme any
var outerHtmlElement: any = outerElement[0];
var coordinates = outerHtmlElement.getBBox();
Edit, fin 2016
Étant donné que l'opérateur de as
conversion préféré de TypeScript 1.6 est que ces lignes peuvent être transformées en élégantes:
let coordinates = (outerElement[0] as any).getBBox();
Autres solutions
Bien sûr, si vous souhaitez le faire correctement, ce qui est parfois exagéré, vous pouvez:
- Créez votre propre interface qui étend simplement
HTMLElement
- Introduire sa propre frappe qui étend
HTMLElement
HTMLElement
et possède lagetBBox
propriété supplémentaire . De cette façon, vous obtenez toujours l'achèvement du code sur les autres propriétés.getBBox
existe-t-il une méthode pour lancer correctement? vous voulez savoir le type degetBBox
?getBBox
seriez deHTMLElement
type, vous pourriez y couler l'objetvar typedElement = <HTMLElement> outerHtmlElement;
.var coordinates = (<any>outerElement[0]).getBBox();
La solution rapide et sale consiste à convertir explicitement en
any
L '«avantage» est que, la distribution étant explicite, cela se compilera même avec le
noImplicitAny
drapeau défini.La bonne solution consiste à mettre à jour le fichier de définition des typages.
Veuillez noter que lorsque vous convertissez une variable en
any
, vous désactivez la vérification de type pour cette variable.Étant donné que je suis en mode de non-responsabilité, la double diffusion via
any
combinée à une nouvelle interface peut être utile dans les situations où vouspourtant, vous voulez toujours une forme de frappe.
Supposons que vous souhaitiez corriger la définition d'une instance
y
de typeOrginalDef
avec une nouvelle propriétéx
de typenumber
:la source
Vous pouvez également utiliser l'astuce suivante:
y.x = "some custom property"//gives typescript error
y["x"] = "some custom property"//no errors
Notez que pour accéder
x
et ne pas obtenir à nouveau une erreur de frappe, vous devez l'écrire comme çay["x"]
, nony.x
. Dans cette perspective, les autres options sont donc meilleures.la source
:any
?Il existe plusieurs façons de gérer ce problème. Si cet objet est lié à une bibliothèque externe, la meilleure solution serait de trouver le fichier de définitions réel (grand référentiel ici ) pour cette bibliothèque et de le référencer, par exemple:
Bien sûr, cela ne s'applique pas dans de nombreux cas.
Si vous souhaitez "remplacer" le système de saisie, essayez ce qui suit:
Cela vous permettra de faire tous les appels que vous souhaitez
var y
.la source
/// <reference path="/path/to/jquery.d.ts" />
avec la balise de fermeture automatique à la finjquery.d.ts
fichier dans mon projetnpm install -g tsd
alorstsd install jquery
Lorsque TypeScript pense que la propriété "x" n'existe pas sur "y" , vous pouvez toujours convertir "y" en "any", ce qui vous permettra d'appeler n'importe quoi (comme "x") sur "y".
Théorie
Exemple du monde réel
J'obtenais l'erreur "TS2339: La propriété 'nom' n'existe pas sur le type 'Fonction'" pour ce code:
Je l'ai donc corrigé avec:
la source
J'ai eu un problème dans Angular2, j'utilisais le stockage local pour enregistrer quelque chose et il ne me le permettait pas.
Solutions:
j'ai eu
localStorage.city -> error -> Property 'city' does not exist on type 'Storage'.
Comment le réparer:
la source
<any>
-(<any>localStorage).city
.Une solution rapide où rien d'autre ne fonctionne:
Ce n'est pas une bonne pratique mais fournit une solution sans avoir besoin de désactiver le littéral sans chaîne
la source
Je sais que c'est maintenant 2020, mais je n'ai pas pu voir une réponse qui satisfasse la partie "ignorer" de la question. Il s'avère que vous pouvez dire à TSLint de faire exactement cela en utilisant une directive;
Normalement, cela générerait une erreur, indiquant que «someProp n'existe pas sur le type». Avec le commentaire, cette erreur disparaît.
Cela arrêtera toute erreur lors de la compilation et devrait également empêcher votre IDE de vous plaindre.
la source
Dans mon projet particulier, je ne pouvais pas le faire fonctionner et utilisé
declare var $;
. Ce n'est pas une solution propre / recommandée, il ne reconnaît pas les variables JQuery, mais je n'ai eu aucune erreur après l'avoir utilisé (et j'ai dû pour que mes builds automatiques réussissent).la source
J'ai pu surmonter cela en tapant à la machine en utilisant quelque chose comme:
Cela semblait être la seule façon dont je pouvais utiliser les valeurs à l'intérieur de X comme clés pour la carte Y et compiler.
la source