打字稿参数数量错误
Posted
技术标签:
【中文标题】打字稿参数数量错误【英文标题】:Typescript number of arguments error 【发布时间】:2017-07-18 12:20:42 【问题描述】:快速提问,我相信有人会快速回答这个问题。
我正在尝试使用文档。
document.createElement("button", "option");
typescript 由于第二个参数不喜欢这样,它抱怨它只期望一个参数而不是两个参数被传递。在 vanilla JS 中,两个参数是可以接受的。
如何让 typescript 编译器允许这样做?
【问题讨论】:
【参考方案1】:看起来标准定义不允许这样做,而且似乎是错误的。
我想 github 上的一个 bug 应该是有序的。
与此同时,您可以将函数保存为另一种类型。例如。
let createElement: (tagname: string, options: string) => htmlElementTagNameMap = document.createElement;
【讨论】:
确实,您的解决方案要好得多。 :) 不过,我发现的唯一相关问题是#574。我们可以从一个新问题中受益。【参考方案2】:根据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.
【讨论】:
【参考方案3】:定义中缺少它,但您可以轻松添加它:
interface Document
createElement(tagName: string, options?: string | is: string );
如果您使用的是模块系统(您导入/导出),那么您需要这样做:
declare global
interface Document
createElement(tagName: string, options?: string | is: string );
【讨论】:
是的,使用界面并将选项声明为可选已经解决了这个问题,我有点尴尬我自己没有想到这一点,但非常感谢@Nitzan 你真的挖了我走出角落以上是关于打字稿参数数量错误的主要内容,如果未能解决你的问题,请参考以下文章
打字稿错误 TS2345 错误:TS2345:“缓冲区”类型的参数不可分配给“字符串”类型的参数