Я знаю, что вопрос уже закрыт, но я обнаружил, что он ищет то же исключение TypeScriptException, возможно, кто-то еще задал этот вопрос в поисках этой проблемы.
Проблема заключается в отсутствии ввода TypeScript:
var coordinates = outerElement[0].getBBox();
Броски The property 'getBBox' does not exist on value of type 'HTMLElement'.
Самый простой способ - явно указать переменную как any
var outerHtmlElement: any = outerElement[0];
var coordinates = outerHtmlElement.getBBox();
Редактировать, конец 2016
Поскольку предпочтительным оператором приведения является TypeScript 1.6, as
эти строки можно сжать до элегантного:
let coordinates = (outerElement[0] as any).getBBox();
Другие решения
Конечно, если вы хотите сделать это правильно, что иногда является излишним, вы можете:
- Создайте собственный интерфейс, который просто расширяется
HTMLElement
- Введите собственный набор текста, который расширяет
HTMLElement
HTMLElement
и имеет дополнительноеgetBBox
свойство. Таким образом, вы по-прежнему получаете завершение кода для других свойств.getBBox
есть ли способ, чтобы бросить в порядке? хотели бы узнать типgetBBox
?getBBox
бы вы были вHTMLElement
типе, вы могли бы привести объект к немуvar typedElement = <HTMLElement> outerHtmlElement;
.var coordinates = (<any>outerElement[0]).getBBox();
Быстрое и грязное решение - явное приведение к
any
«Преимущество» состоит в том, что при явном приведении это будет компилироваться даже с установленным
noImplicitAny
флагом.Правильным решением является обновление файла определения набора текста.
Обратите внимание, что когда вы приводите переменную к
any
, вы отказываетесь от проверки типа для этой переменной.Поскольку я нахожусь в режиме отказа от ответственности, двойное приведение в
any
сочетании с новым интерфейсом может быть полезно в ситуациях, когда вытем не менее, вы все еще хотите некоторую форму ввода.
Допустим, вы хотите исправить определение экземпляра
y
типаOrginalDef
новым свойствомx
типаnumber
:источник
Вы также можете использовать следующий трюк:
y.x = "some custom property"//gives typescript error
y["x"] = "some custom property"//no errors
Обратите внимание: чтобы получить доступ
x
к ошибке машинописания и не получить ее снова, нужно написать ее такy["x"]
, а не такy.x
. Так что с этой точки зрения другие варианты лучше.источник
:any
?Есть несколько способов справиться с этой проблемой. Если этот объект связан с какой-то внешней библиотекой, лучшим решением было бы найти фактический файл определений (большой репозиторий здесь ) для этой библиотеки и сослаться на него, например:
Конечно, это не относится во многих случаях.
Если вы хотите переопределить систему типов, попробуйте следующее:
Это позволит вам делать любые звонки по вашему желанию
var y
.источник
/// <reference path="/path/to/jquery.d.ts" />
с самозакрывающимся тегом в концеjquery.d.ts
файла в моем проектеnpm install -g tsd
тогдаtsd install jquery
Когда TypeScript считает, что свойство «x» не существует в «y» , тогда вы всегда можете преобразовать «y» в «any», что позволит вам вызывать что угодно (например, «x») для «y».
теория
Пример из реального мира
Я получаю сообщение об ошибке "TS2339: свойство 'name' не существует для типа 'Function'" для этого кода:
Поэтому я исправил это с помощью:
источник
У меня была проблема в Angular2, я использовал локальное хранилище, чтобы что-то сохранить, и это не позволило мне.
Решения:
я имел
localStorage.city -> error -> Property 'city' does not exist on type 'Storage'.
Как это исправить:
источник
<any>
-(<any>localStorage).city
.Быстрое исправление, где больше ничего не работает:
Не очень хорошая практика, но предоставляет решение без необходимости выключать no-string-literal
источник
Я знаю, что сейчас 2020, но я не смог найти ответ, который удовлетворил бы «игнорирующую» часть вопроса. Оказывается, вы можете сказать TSLint сделать это, используя директиву;
Обычно это выдает ошибку, утверждая, что «someProp не существует для типа». С комментарием эта ошибка исчезает.
Это остановит любые ошибки, возникающие при компиляции, а также остановит жалобу вашей IDE на вас.
источник
В моем конкретном проекте я не мог заставить его работать, и использовал
declare var $;
. Не чистое / рекомендованное решение, оно не распознает переменные JQuery, но у меня не было ошибок после его использования (и пришлось, чтобы мои автоматические сборки были успешными).источник
Я смог обойти это в машинописи, используя что-то вроде:
Казалось, это единственный способ, которым я мог использовать значения внутри X в качестве ключей для карты Y и компилировать.
источник