Ignorar errores de Typescript " la propiedad no existe en el valor del tipo"
En el edificio VS2013 se detiene cuando tsc sale con el código 1. Este no fue el caso en VS2012.
¿Cómo puedo ejecutar mi solución ignorando el tsc?exe error?
Recibo muchos errores The property 'x' does not exist on value of type 'y'
que quiero ignorar cuando uso funciones javascript.
9 answers
Sé que la pregunta ya está cerrada, pero la he encontrado buscando el mismo TypeScriptException, tal vez alguien más golpeó esta pregunta buscando este problema.
El problema radica en que falta TypeScript typing:
var coordinates = outerElement[0].getBBox();
Lanza The property 'getBBox' does not exist on value of type 'HTMLElement'.
La forma más fácil es escribir explícitamente variable como any
var outerHtmlElement: any = outerElement[0];
var coordinates = outerHtmlElement.getBBox();
Editar, finales de 2016
Desde TypeScript 1.6 prefered casting operator es as
esas líneas pueden ser squqshed en elegante:
let coordinates = (outerElement[0] as any).getBBox();
Otras soluciones
Por supuesto, si quieres hacerlo bien, lo cual es un exceso a veces, puedes:
- Crear propia interfaz que simplemente extiende
HTMLElement
- Introducir tipificación propia que extiende
HTMLElement
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-06 12:13:40
La solución rápida y sucia es lanzar explícitamente a any
(y as any).x
La "ventaja" es que, siendo el cast explícito, esto se compilará incluso con el conjunto de banderas noImplicitAny
.
La solución adecuada es actualizar el archivo de definición de typings.
Tenga en cuenta que, cuando se envía una variable a any
, se excluye de la comprobación de tipo para esa variable.
Dado que estoy en modo de descargo de responsabilidad, doble casting a través de any
combinado con una nueva interfaz, puede ser útil en situaciones en las que
- no desea actualizar un archivo de escritura roto
- son parches de monos
Sin embargo, todavía quieres alguna forma de escribir.
Digamos que desea parchear la definición de una instancia de y
de tipo OrginalDef
con una nueva propiedad x
de tipo number
:
const y: OriginalDef = ...
interface DefWithNewProperties extends OriginalDef {
x: number
}
const patched = y as any as DefWithNewProperties
patched.x = .... //will compile
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-10 07:28:17
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 a x
y no volver a obtener un error de typescript, debe escribirlo así y["x"]
, no y.x
. Así que desde esta perspectiva las otras opciones son mejores.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-27 13:21:20
Hay varias maneras 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 (great repository aquí) para esa biblioteca y referenciarlo, por ejemplo:
/// <reference path="/path/to/jquery.d.ts" >
Por supuesto, esto no se aplica en muchos casos.
Si desea 'anular' el sistema de tipos, intente lo siguiente:
declare var y;
Esto le permitirá hacer cualquier llamada que desee en var y
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-06 16:43:53
Cuando Manuscrito piensa que la propiedad "x" no existe en "y", entonces siempre se puede echar "y" en "cualquier", que le permitirá llamar a cualquier cosa (como "x") en "y".
Teoría
(<any>y).x;
Ejemplo del Mundo Real
Estaba recibiendo el error "TS2339: La propiedad 'name' no existe en el tipo 'Function' " para este código:
let name: string = this.constructor.name;
Así que lo arreglé con:
let name: string = (<any>this).constructor.name;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-05 20:59:22
Tenía un problema en Angular2, estaba usando el almacenamiento local para guardar algo y no me dejaba.
Soluciones:
Tenía localStorage.city -> error -> Property 'city' does not exist on type 'Storage'.
Cómo arreglarlo:
LocalStorage['city']
(localStorage).ciudad
(localStorage como any).ciudad
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-26 05:46:59
Una solución rápida donde nada más funciona:
const a.b = 5 // error
const a['b'] = 5 // error if ts-lint rule no-string-literal is enabled
const B = 'b'
const a[B] = 5 // always works
No es una buena práctica, pero proporciona una solución sin necesidad de desactivar no-string-literal
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-02 13:17:40
En mi proyecto en particular no pude hacerlo funcionar, y usé declare var $;
. No es una solución limpia/recomendada, no reconoce las variables de jQuery, pero no tuve errores después de usar eso (y tuve que hacerlo para que mis compilaciones automáticas tuvieran éxito).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-16 14:09:05
Pude superar esto en typescript usando algo como:
let x = [ //data inside array ];
let y = new Map<any, any>();
for (var i=0; i<x.length; i++) {
y.set(x[i], //value for this key here);
}
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.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-12 23:19:14