Sé que la pregunta ya está cerrada, pero la encontré buscando la misma excepción TypeScriptException, tal vez alguien más respondió a esta pregunta buscando este problema.
El problema radica en la falta de escritura de TypeScript:
var coordinates = outerElement[0].getBBox();
Arroja The property 'getBBox' does not exist on value of type 'HTMLElement'.
La forma más fácil es escribir explícitamente la variable como any
var outerHtmlElement: any = outerElement[0];
var coordinates = outerHtmlElement.getBBox();
Editar, finales de 2016
Dado que el operador de conversión preferido de TypeScript 1.6 es as
esas líneas se pueden dividir en elegantes:
let coordinates = (outerElement[0] as any).getBBox();
Otras soluciones
Por supuesto, si desea hacerlo bien, lo que a veces es una exageración, puede:
- Crear una interfaz propia que simplemente se extienda
HTMLElement
- Introducir su propia escritura que se extiende
HTMLElement
HTMLElement
y tenga lagetBBox
propiedad adicional . De esa manera, aún se completa el código en las otras propiedades.getBBox
¿hay algún método para lanzarlo? le gustaría saber el tipo degetBBox
?getBBox
estuviera enHTMLElement
tipo, podría lanzarle el objetovar typedElement = <HTMLElement> outerHtmlElement;
.var coordinates = (<any>outerElement[0]).getBBox();
La solución rápida y sucia es emitir explícitamente a
any
La "ventaja" es que, siendo el elenco explícito, esto se compilará incluso con el
noImplicitAny
conjunto de banderas.La solución adecuada es actualizar el archivo de definición de tipings.
Tenga en cuenta que, cuando convierte una variable a
any
, opta por no verificar el tipo de esa variable.Dado que estoy en modo de descargo de responsabilidad, la transmisión doble a través de
any
una nueva interfaz puede ser útil en situaciones en las queaún así, todavía quieres algún tipo de escritura.
Supongamos que desea parchear la definición de una instancia
y
de tipoOrginalDef
con una nueva propiedadx
de tiponumber
:fuente
También puedes usar el siguiente truco:
y.x = "some custom property"//gives typescript error
y["x"] = "some custom property"//no errors
Tenga en cuenta que para acceder
x
y no obtener un error de mecanografía nuevamente, debe escribirlo asíy["x"]
, noy.x
. Desde esta perspectiva, las otras opciones son mejores.fuente
:any
?Hay varias formas de manejar este problema. Si este objeto está relacionado con alguna biblioteca externa, la mejor solución sería encontrar el archivo de definiciones real (gran repositorio aquí ) para esa biblioteca y hacer referencia a ella, por ejemplo:
Por supuesto, esto no se aplica en muchos casos.
Si desea 'anular' el sistema de tipos, intente lo siguiente:
Esto le permitirá hacer las llamadas que desee
var y
.fuente
/// <reference path="/path/to/jquery.d.ts" />
con la etiqueta de cierre automático al finaljquery.d.ts
archivo en mi proyectonpm install -g tsd
entoncestsd install jquery
Cuando TypeScript cree que la propiedad "x" no existe en "y" , siempre puede convertir "y" en "any", lo que le permitirá llamar a cualquier cosa (como "x") en "y".
Teoría
Ejemplo del mundo real
Recibí el error "TS2339: la propiedad 'nombre' no existe en el tipo 'Función'" para este código:
Entonces lo arreglé con:
fuente
Tenía un problema en Angular2, estaba usando el almacenamiento local para guardar algo y no me lo permitió.
Soluciones:
yo tenía
localStorage.city -> error -> Property 'city' does not exist on type 'Storage'.
Como arreglarlo:
fuente
<any>
-(<any>localStorage).city
.Una solución rápida donde nada más funciona:
No es una buena práctica, pero proporciona una solución sin necesidad de desactivar el literal sin cadenas
fuente
Sé que ahora es 2020, pero no pude ver una respuesta que satisficiera la parte de "ignorar" de la pregunta. Resulta que puedes decirle a TSLint que haga eso usando una directiva;
Normalmente esto arrojaría un error, indicando que 'someProp no existe en el tipo'. Con el comentario, ese error desaparece.
Esto detendrá cualquier error que se genere al compilar y también debería evitar que su IDE se queje de usted.
fuente
En mi proyecto particular no pude hacerlo funcionar, y lo usé
declare var $;
. No es una solución limpia / recomendada, no reconoce las variables JQuery, pero no tuve errores después de usar eso (y tuve que hacerlo para que mis compilaciones automáticas tuvieran éxito).fuente
Pude superar esto en mecanografiado usando algo como:
Esta parecía ser la única forma en que podía usar los valores dentro de X como claves para el mapa Y y compilar.
fuente