I am trying to instantiate new HTMLDivElement in TypeScript
var elem = new HTMLDivElement();
but the browser throws
Uncaught T
If you extend HTMLElement or any subclass like HTMLDivElement
You also need to register the custom element
class SampleDiv extends HTMLDivElement{
constructor(){
super();
}
}
customElements.define('sample-div', SampleDiv, { extends: 'div' });
See more here: https://javascript.info/custom-elements
Note that the error you get here is "Illegal constructor". This is different from the error "object is not a function" that you would get if you were to write new {}(), for example.
So, technically, HTMLDivElement does have a constructor. It's just that this particular constructor throws an exception rather than creating an object.
Normally lib.d.ts would just exclude such useless signatures, but TypeScript requires that the right-hand side of the instanceof operator have a constructor. In other words, it's legal to write foo instanceof HTMLElement, but not foo instanceof [], and the difference is determined by the fact that HTMLElement has a constructor.
There were basically three choices on the table here:
instanceof's right operand. This is undesirable because you'd really prefer to catch errors where someone accidentally writes code like x instanceof foo instead of x instanceof Foo (where foo is an instance of Foo).instanceof check in place. This is bad because foo instanceof HTMLElement is a very reasonable thing to write.You can't construct DOM elements using normal constructors because you're supposed to go through document.createElement. This is basically for technical reasons relating to how browsers implement these objects.
You have mistaken typescript syntax with c# syntax.
Just replace
var elem = new HTMLDivElement();
with one of the following
var elem = document.createElement('div');
or
var elem = <HTMLDivElement>(document.createElement('div'));
or
let elem = document.createElement('div') as HTMLDivElement
(if you need to use HTMLDivElement attributes)