Ignore Typescript Errors "property does not exist on value of type"
I know the question is already closed but I've found it searching for same TypeScriptException, maybe some one else hit this question searching for this problem.
The problem lays in missing TypeScript typing:
var coordinates = outerElement[0].getBBox();
Throws The property 'getBBox' does not exist on value of type 'HTMLElement'.
The easiest way is to explicitly type variable as `any`
var outerHtmlElement: any = outerElement[0];
var coordinates = outerHtmlElement.getBBox();
Edit, late 2016
Since TypeScript 1.6, the prefered casting operator is as
, so those lines can be squashed into:
let coordinates = (outerElement[0] as any).getBBox();
Other solutions
Of course if you'd like to do it right, which is an overkill sometimes, you can:
- Create own interface which simply extends
HTMLElement
- Introduce own typing which extends
HTMLElement
The quick and dirty solution is to explicitly cast to any
(y as any).x
The "advantage" is that, the cast being explicit, this will compile even with the noImplicitAny
flag set.
The proper solution is to update the typings definition file.
Please note that, when you cast a variable to any
, you opt out of type checking for that variable.
Since I am in disclaimer mode, double casting via any
combined with a new interface, can be useful in situations where
- you do not want to update a broken typings file
- and/or you are monkey patching
yet, you still want some form of typing.
Say you want to patch the definition of an instance of y
of type OrginalDef
with a new property x
of type number
:
const y: OriginalDef = ...
interface DefWithNewProperties extends OriginalDef {
x: number
}
const patched = y as any as DefWithNewProperties
patched.x = .... //will compile
You can also use the following trick:
y.x = "some custom property"//gives typescript error
y["x"] = "some custom property"//no errors
Note, that to access x
and dont get a typescript error again you need to write it like that y["x"]
, not y.x
. So from this perspective the other options are better.