快速提问,我确定有人能快速回答这个问题。
我正在尝试使用文档。
document.createElement("button", "option");
由于第二个参数,typescript不喜欢这个,它抱怨它只期望传递一个参数而不是两个。在vanilla JS中,有两个论点可以接受。
如何让typescript编译器允许这样做?
答案 0 :(得分:3)
标准定义似乎不允许这样做,似乎是错误的。
我猜github上的bug会有序。
在此期间,您可以使用其他类型保存该功能。例如。
let createElement: (tagname: string, options: string) => HTMLElementTagNameMap = document.createElement;
答案 1 :(得分:3)
根据the standard,第二个参数应该是一个具有单个is
属性的对象,而不是一个字符串。因此,理论上,该行应该是:
document.createElement("button", { is: "option" });
字符串的使用属于旧规范的一部分,虽然受Chrome支持,但已弃用。
在任何情况下,该重载都不在lib.d.ts中,因此您需要overload that definition yourself as @NitzanTomer describes和/或创建an issue at TypeScript's GitHub repo explaining the issue。
请注意,您尝试使用的createElement
的重载是Custom Elements规范的一部分,在撰写本文时,它是一个工作草案,因此TypeScript维护者可能不支持添加它到lib.d.ts。
答案 2 :(得分:2)
定义中缺少它,但您可以轻松添加它:
interface Document {
createElement(tagName: string, options?: string | { is: string });
}
如果您正在使用模块系统(导入/导出),那么您需要这样做:
declare global {
interface Document {
createElement(tagName: string, options?: string | { is: string });
}
}