clb
clb

Reputation: 723

Property 'width' does not exist on type 'HTMLElement'

The following TypeScript fails to compile:

let svg = document.createElement("svg");
svg.width = 300;

Due to the error Property 'width' does not exist on type 'HTMLElement'. But if I change svg to canvas, for example, then it does compile, so it's something about SVGs specifically it seems...

Any ideas?

Upvotes: 3

Views: 5533

Answers (4)

qiAlex
qiAlex

Reputation: 4346

Your question title is question "Property 'width' does not exist on type 'HTMLElement'"

HTMLElement has no property width it has property style. and style had width

let svg = document.createElement("svg");
svg.style.width = '30px';

In your case you need an SVGSVGElement

var svgEl = document.createElementNS("http://www.w3.org/2000/svg", "svg")
svgEl.width = 300

Upvotes: -2

Open up
Open up

Reputation: 105

In SVG width and height of elements are attributes and not CSS properties so you'd need to write

document.getElementById('cercle1').setAttribute("height", "10px");

similarly for the width.

Change height/width of object SVG javascript

In your case:

svg.setAttribute("width", "300px");

Upvotes: 0

John Weisz
John Weisz

Reputation: 31992

As Marzelin explained, the proper way to create an svg element is by using document.createElementNS instead:

document.createElementNS("http://www.w3.org/2000/svg", "svg");

The TypeScript standard lib knows this well, hence why you are getting a HTMLElement return type inference from document.createElement("svg") instead of SVGSVGElement.

Upvotes: 1

marzelin
marzelin

Reputation: 11610

let svg = document.createElement("svg"); doesn't create svg element, but custom html element.

Proper way to create svg element:

let svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");

const customSvg = document.createElement("svg")
const properSvg = document.createElementNS("http://www.w3.org/2000/svg", "svg")

console.log(customSvg instanceof SVGSVGElement) // false
console.log(properSvg instanceof SVGSVGElement) // true

console.log(customSvg.width) // undefined
console.log(properSvg.width) // SVGAnimatedLength {}

Upvotes: 4

Related Questions