我正在将一些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
方法吗?
答案 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());