【发布时间】:2020-01-27 22:36:22
【问题描述】:
我试图了解打字稿中的函数重载是如何工作的。
type CreateElement = {
(tag: 'a'): HTMLAnchorElement
(tag: 'canvas'): HTMLCanvasElement
(tag: 'table'): HTMLTableElement
}
let createElement: CreateElement = (tag: 'a' | 'canvas' | 'table') => {
if (tag === 'a') return new HTMLAnchorElement()
if (tag === 'canvas') return new HTMLCanvasElement()
if (tag === 'table') return new HTMLTableElement()
throw new Error('wrong tag');
}
上面的代码抛出错误:
Type 'HTMLAnchorElement | HTMLCanvasElement | HTMLTableElement' is not assignable to type 'HTMLAnchorElement'.
Type 'HTMLCanvasElement' is missing the following properties from type 'HTMLAnchorElement': charset, coords, download, hreflang, and 21 more.
我已确保在为给定的tag 类型返回适当的类型之前解析参数tag。任何想法为什么这不起作用?
【问题讨论】:
-
不会
CreateElement是type CreateElement = HTMLAnchorElement | HTMLCanvasElement | HTMLTableElement? -
不确定你的意思,我通过函数签名的联合来重载函数,但你指的是对象的联合。
标签: typescript