Eu sei que a pergunta já está fechada, mas eu a encontrei procurando pela mesma TypeScriptException, talvez alguém mais tenha encontrado essa pergunta procurando esse problema.
O problema está na falta da digitação do TypeScript:
var coordinates = outerElement[0].getBBox();
Arremessos The property 'getBBox' does not exist on value of type 'HTMLElement'.
A maneira mais fácil é digitar explicitamente variável como any
var outerHtmlElement: any = outerElement[0];
var coordinates = outerHtmlElement.getBBox();
Editar, final de 2016
Como o operador de conversão preferido do TypeScript 1.6, as
essas linhas podem ser compactadas com elegância:
let coordinates = (outerElement[0] as any).getBBox();
Outras soluções
Obviamente, se você quiser fazer o certo, que às vezes é um exagero, você pode:
- Crie uma interface própria que simplesmente se estende
HTMLElement
- Introduzir digitação própria que se estende
HTMLElement
HTMLElement
e tenha agetBBox
propriedade adicional . Dessa forma, você ainda obtém a conclusão do código nas outras propriedades.getBBox
usar qualquer um, existe algum método para usar propriamente? gostaria de descobrir o tipo degetBBox
?getBBox
fosse doHTMLElement
tipo, você poderia converter o objeto nelevar typedElement = <HTMLElement> outerHtmlElement;
.var coordinates = (<any>outerElement[0]).getBBox();
A solução rápida e suja é lançar explicitamente para
any
A "vantagem" é que, sendo o elenco explícito, isso será compilado mesmo com o
noImplicitAny
sinalizador definido.A solução adequada é atualizar o arquivo de definição de digitações.
Observe que, ao converter uma variável para
any
, você desativa a verificação de tipo para essa variável.Como estou no modo de isenção de responsabilidade, a transmissão dupla via
any
combinada com uma nova interface pode ser útil em situações nas quais vocêainda assim, você ainda deseja alguma forma de digitação.
Digamos que você queira corrigir a definição de uma instância
y
do tipoOrginalDef
com uma nova propriedadex
do tiponumber
:fonte
Você também pode usar o seguinte truque:
y.x = "some custom property"//gives typescript error
y["x"] = "some custom property"//no errors
Observe que, para acessar
x
e não receber um erro de texto novamente, você precisa escrevê-lo assimy["x"]
, nãoy.x
. Portanto, dessa perspectiva, as outras opções são melhores.fonte
:any
?Existem várias maneiras de lidar com esse problema. Se esse objeto estiver relacionado a alguma biblioteca externa, a melhor solução seria encontrar o arquivo de definições real (ótimo repositório aqui ) para essa biblioteca e referenciá-lo, por exemplo:
Obviamente, isso não se aplica em muitos casos.
Se você deseja 'substituir' o sistema de tipos, tente o seguinte:
Isso permitirá que você faça as chamadas que desejar
var y
.fonte
/// <reference path="/path/to/jquery.d.ts" />
com a tag de fechamento automático no finaljquery.d.ts
arquivo no meu projetonpm install -g tsd
thentsd install jquery
Quando o TypeScript pensa que a propriedade "x" não existe em "y" , você sempre pode converter "y" em "any", o que permitirá chamar qualquer coisa (como "x") em "y".
Teoria
Exemplo do mundo real
Eu estava recebendo o erro "TS2339: a propriedade 'name' não existe no tipo 'Function'" para este código:
Então eu o corrigi com:
fonte
Tive um problema no Angular2, eu estava usando o armazenamento local para salvar algo e isso não me permitiu.
Soluções:
eu tinha
localStorage.city -> error -> Property 'city' does not exist on type 'Storage'.
Como corrigi-lo:
fonte
<any>
-(<any>localStorage).city
.Uma solução rápida onde nada mais funciona:
Não é uma boa prática, mas fornece uma solução sem a necessidade de desativar no-string-literal
fonte
Sei que agora é 2020, mas não consegui ver uma resposta que satisfizesse a parte "ignorar" da pergunta. Acontece que você pode dizer ao TSLint para fazer exatamente isso usando uma diretiva;
Normalmente, isso geraria um erro, afirmando que 'someProp não existe no tipo'. Com o comentário, esse erro desaparece.
Isso interromperá a ocorrência de erros ao compilar e também interromperá a reclamação do IDE.
fonte
No meu projeto em particular, não consegui fazê-lo funcionar e usado
declare var $;
. Não é uma solução limpa / recomendada, ela não reconhece as variáveis JQuery, mas não tive erros depois de usá-la (e era necessário que minhas compilações automáticas fossem bem-sucedidas).fonte
Consegui superar isso em texto datilografado usando algo como:
Essa parecia ser a única maneira de eu usar os valores dentro de X como chaves para o mapa Y e compilar.
fonte