Typescript: Clase 'x' utilizada antes de su declaración

Creado en 11 ago. 2017  ·  4Comentarios  ·  Fuente: microsoft/TypeScript

##

Versión de TypeScript: 2.4.1
Versión de Visual Studio: 14.0.25420.01 Actualización 3

Archivo: ParallelogramF.ts
namespace JMath { export class ParallelogramF extends Polygon { ... } }
Archivo: Polygon.ts
namespace JMath { export class Polygon { } }

Comportamiento esperado:
La clase Polygon debe conocerse correctamente.

Comportamiento real:
Se produce un error: la clase Polígono utilizada antes de su declaración.

Esto ocurre solo cuando la casilla de verificación 'Combinar salida de JavaScript en un archivo' en las propiedades del proyecto está marcada y se especifica un nombre de archivo 'xxx.js' delante de ella.

Solución:
1- Cuando cambio el nombre del archivo "ParallelogramF.ts" a "ZParallelogramF.ts" se resuelve el problema y se compila correctamente !!!!
2- Cuando desmarco la casilla de verificación 'Combinar salida de JavaScript en un archivo', se compila correctamente.

Cambiar el lugar de 'TypeScriptCompile Include = "ParallelogramF.ts"' en el archivo ".csproj" del proyecto al último elemento dentro de su etiqueta principal no ayuda.

Question

Comentario más útil

@arashebrahimi Intenta agregar
/// <reference path="Polygon.ts"/>
en la parte superior de su archivo ParallelogramF.ts

Puede haber una forma "más nueva" de hacerlo, pero eso le permite al compilador compilar Polygon.ts antes que ParallelogramF.ts cuando se compila en un solo archivo

Todos 4 comentarios

Notará que en los casos en los que obtenga un error, el código compilado no se ejecutará.

Gracias por responder,

¿No encuentro la relación entre este problema y su respuesta?
Es obvio que cuando hay un error, el código compilado no se ejecutará !!!!!!!!!

¡Pero hablé de un 'error' incorrecto cuando compilo!
¿Dónde hablé de 'correr' ???

Dije que hay un error cuando compilo, debería compilarse sin errores, ¡pero obtengo un error 'incorrecto'!

@arashebrahimi Intenta agregar
/// <reference path="Polygon.ts"/>
en la parte superior de su archivo ParallelogramF.ts

Puede haber una forma "más nueva" de hacerlo, pero eso le permite al compilador compilar Polygon.ts antes que ParallelogramF.ts cuando se compila en un solo archivo

No entiendo cómo es este comportamiento esperado. El problema es que la clase secundaria no se reconoce como tal dentro del mismo espacio de nombres, lo que, en teoría, debería eliminar la necesidad de mencionar explícitamente la referencia. El compilador debería _ saber_ compilar la clase base antes que cualquier clase secundaria.

Lo que creo que @arashebrahimi está diciendo es que parece ser un problema de alfabetización donde las clases secundarias que vienen después de la clase base (en el nombre del archivo) reconocen alfabéticamente la relación de herencia, pero las que vienen antes no. Sin embargo, descubrí que este problema no existe para las interfaces.

Puedo reproducir este problema con TS 2.5.3 en Visual Studio versión 15.4.5.

¿Fue útil esta página
0 / 5 - 0 calificaciones