而不是这段代码:
error: call of overloaded 'print(double)' is ambiguous
我想做这样的事情:
let img = document.createElement("img");
img.src = "foo.png";
img.className = "bar";
img.id = "abc123";
我知道我可以编写一个函数或构造函数来执行此操作,但只是想知道在TypeScript中是否存在某种本机支持?
答案 0 :(得分:1)
是的,从某种意义上来说......
export class newImgModel{
src: string = "foo.png";
className:string = "bar";
id: string = "abc123";
}
所以你可以像这样创建一个元素:
创建一个类来处理它:
class Dynamically_create_element
{
thingToAdd:newImgModel;
Create_Element(thingToAdd)
{
var element = document.createElement("img");
//Assign different attributes to the element.
element.setAttribute("src", thingToAdd.src);
element.setAttribute("class",thingToAdd.className);
element.setAttribute("id", thingToAdd.id);
document.body.appendChild(element);
}
}
然后你可以这样使用:
var objToAdd = new newImgModel();
var create = new Dynamically_create_element();
create.Create_Element(objToAdd );
应该做的伎俩..但我没有测试过!
参考:CS-Corner
答案 1 :(得分:1)
TypeScript中没有本机支持。内置的HTMLImageElement
接口不适合用作选项对象,因为它没有选项。 TypeScript中没有本机支持的原因是因为JavaScript中没有本机支持。在元素创建过程中,您无法传递选项对象。
尽管如此,自己写这篇文章很简单:
export interface CreateImgOptions {
src: string;
className?: string;
id?: string;
}
export function createImg(options: CreateImgOptions): HTMLImageElement {
let img = <HTMLImageElement> document.createElement("img")
img.src = options.src;
if (options.className) img.className = options.className;
if (options.id) img.id = options.id;
return img;
}
用法:
let img = createImg({
src: "foo.png",
className: "bar",
id: "abc123"
});
let img2 = createImg({src: "foo2.png"});