物业宽度'在类型' HTMLElement'中不存在

时间:2017-07-28 15:02:50

标签: javascript typescript svg

以下TypeScript无法编译:

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

由于错误Property 'width' does not exist on type 'HTMLElement'。但是,例如,如果我将svg更改为canvas,那么它会进行编译,因此特别是它似乎是关于SVG的内容......

有什么想法吗?

4 个答案:

答案 0 :(得分:4)

gcc -c -DPERL_CORE -D_REENTRANT -D_GNU_SOURCE -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2 -std=c89 -O2 -Wall -Werror=declaration-after-statement -Wextra -Wc++-compat -Wwrite-strings generate_uudmap.c In file included from /path/to/include/string.h:635:0, from generate_uudmap.c:10: /path/to/include/bits/string3.h:129:1: error: C++ style comments are not allowed in ISO C90 // XXX We have no corresponding builtin yet. ^ /path/to/include/bits/string3.h:129:1: error: (this will be reported only once per input file) make: *** [Makefile:250: generate_uudmap.o] Error 1 不会创建svg元素,而是自定义html元素。

创建let svg = document.createElement("svg");元素的正确方法:

svg

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

答案 1 :(得分:1)

As Marzelin explained,创建svg元素的正确方法是使用document.createElementNS代替:

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

TypeScript标准lib很清楚这一点,因此您从HTMLElement而不是document.createElement("svg")获得SVGSVGElement返回类型推断的原因。

答案 2 :(得分:0)

  

在SVG中,元素的宽度和高度是属性而不是CSS属性,因此您需要编写

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

类似于宽度。

Change height/width of object SVG javascript

在你的情况下:

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

答案 3 :(得分:-2)

您的问题标题是问题“属性'宽度'在类型'HTMLElement'上不存在”

HTMLElement没有属性width,它有属性style。并且stylewidth

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

在您的情况下,您需要SVGSVGElement

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