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.

Author: daniel, 2013-08-06

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:

  1. Crear propia interfaz que simplemente extiende HTMLElement
  2. Introducir tipificación propia que extiende HTMLElement
 175
Author: michalczukm,
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
 81
Author: Bruno Grieder,
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.

 42
Author: Yaroslav Yakovlev,
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.

 36
Author: Charles Marsh,
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;
 13
Author: Benny Neugebauer,
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

 8
Author: Avram Virgil,
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

 1
Author: danday74,
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).

 0
Author: Randy,
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.

 0
Author: cs_pupil,
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