setAttributeNS不允许null

时间:2017-09-06 03:55:58

标签: javascript typescript svg

我正在将一些JavaScript转换为Typescript。

在以下代码中,null被拒绝,因为它无法分配给字符串参数。

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

svg.setAttributeNS(null, 'width', canvas.width.toString());
svg.setAttributeNS(null, 'height', canvas.height.toString());

检查svg的类型,我们发现它是SVGSVGElement(是的,SVG在名称中出现两次)。我尝试显式指定类型svg: SVGElement并且能够将创建的元素分配给它,但是对null问题没有影响。

Difference between setAttribute and setAttributeNS(null,的已接听答案说,当属性没有定义的命名空间时,我必须传递null。然后它建议我使用setAttributeNS“来保持一致性。”

但我无法传递null。我应该传递空字符串吗?那会有用吗?或者我应该使用DOM级别1 setAttribute方法吗?

1 个答案:

答案 0 :(得分:2)

如果文档说允许null,那么不幸的是,这似乎是对定义的疏忽。

幸运的是,您可以轻松解决它。 Typescript支持接口声明合并,因此您可以重新声明文件中的Element接口并添加缺少的方法:

var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
interface Element {
    setAttributeNS(namespaceURI: null, qualifiedName: string, value: string): void;
}
declare var canvas : HTMLCanvasElement;

svg.setAttributeNS(null, 'width', canvas.width.toString());
svg.setAttributeNS(null, 'height', canvas.height.toString());