Typescript: Classe 'x' usada antes de sua declaração

Criado em 11 ago. 2017  ·  4Comentários  ·  Fonte: microsoft/TypeScript

##

Versão TypeScript: 2.4.1
Versão do Visual Studio: 14.0.25420.01 Atualização 3

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

Comportamento esperado:
A classe Polygon deve ser conhecida corretamente.

Comportamento real:
Erro Ocorre: Classe Polygon usado antes de sua declaração.

Isso ocorre apenas quando a caixa de seleção 'Combinar saída JavaScript no arquivo' nas propriedades do projeto está marcada e algum nome de arquivo 'xxx.js' é especificado na frente dela.

Solução:
1- Quando eu mudo o nome do arquivo "ParallelogramF.ts" para "ZParallelogramF.ts" o problema resolve e ele compila corretamente !!!!
2- Quando eu desmarque a caixa de seleção 'Combinar saída JavaScript no arquivo', ele compila corretamente !!!!

Mudar de lugar de 'TypeScriptCompile Include = "ParallelogramF.ts"' no arquivo ".csproj" do projeto para o último item dentro de sua tag pai não ajuda.

Question

Comentários muito úteis

@arashebrahimi Tente adicionar
/// <reference path="Polygon.ts"/>
bem no topo do seu arquivo ParallelogramF.ts

Pode haver uma maneira "mais nova" de fazer isso, mas isso permite que o compilador saiba como compilar Polygon.ts antes de ParallelogramF.ts ao compilar em um único arquivo

Todos 4 comentários

Você notará que, nos casos em que obtém um erro, o código compilado não será executado.

Obrigado pela resposta,

Não consigo encontrar a relação entre este problema e a sua resposta? !!!
É óbvio que quando houver um erro, o código compilado não será executado !!!!!!!!!

Mas eu falei sobre 'erro' incorreto ao compilar !!!!
Onde eu falei sobre 'correr' ???

Eu disse que há um bug ao compilar, deveria ser compilado sem erros, mas recebo o erro 'incorreto' !!!!

@arashebrahimi Tente adicionar
/// <reference path="Polygon.ts"/>
bem no topo do seu arquivo ParallelogramF.ts

Pode haver uma maneira "mais nova" de fazer isso, mas isso permite que o compilador saiba como compilar Polygon.ts antes de ParallelogramF.ts ao compilar em um único arquivo

Não entendo como esse comportamento é esperado. O problema é que a classe filha não está sendo reconhecida como tal no mesmo namespace - o que deveria, em teoria, eliminar a necessidade de chamar explicitamente a referência. O compilador deve _know_ para compilar a classe base antes de qualquer e todas as classes filhas.

O que eu acredito que @arashebrahimi está afirmando é que parece ser um problema de alfabetização onde classes filho que vêm depois da classe base (no nome do arquivo) reconhecem alfabeticamente o relacionamento de herança, mas aquelas que vêm antes não. Descobri que esse problema não existe para interfaces, no entanto.

Consigo reproduzir esse problema com o TS 2.5.3 no Visual Studio versão 15.4.5.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

Antony-Jones picture Antony-Jones  ·  3Comentários

seanzer picture seanzer  ·  3Comentários

Roam-Cooper picture Roam-Cooper  ·  3Comentários

fwanicka picture fwanicka  ·  3Comentários

bgrieder picture bgrieder  ·  3Comentários