Typescript参数数量错误

时间:2017-07-18 12:20:42

标签: javascript typescript

快速提问,我确定有人能快速回答这个问题。

我正在尝试使用文档。

document.createElement("button", "option");
由于第二个参数,

typescript不喜欢这个,它抱怨它只期望传递一个参数而不是两个。在vanilla JS中,有两个论点可以接受。

如何让typescript编译器允许这样做?

3 个答案:

答案 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 });
    }
}