给定以下代码:
type Foo = {
func(a:string):void;
func(b:number, a:string):void;
}
const f:Foo = {
func(b, a) {
// ???
}
}
我得到了错误
类型'(b:编号,a:string)=〉void "不能赋值给类型"{(a:字符串):无效;(b:编号,a:字符串):无效; }'. ts(2322)索引. ts(15,3):所需类型来自此处对类型"Foo"声明的属性"func"
我看到了使用类的答案,但是如何在普通对象上实现呢?
1条答案
按热度按时间sr4lhrrt1#
编译器显然不满意
func(b, a)
需要第二个参数,而Foo
的func
方法不需要,可以通过在实现中使a
可选来消除这个错误:注意,通常情况下,并不总是能找到一种可以编译的方法。重载函数 * 语句 * 允许它们的实现比任何调用签名类型化得更松散,但重载函数 * 表达式 * 并不是这样工作的:
在microsoft/TypeScript#47669中有一个特性请求,允许箭头函数以与函数语句相同的方式重载,但目前它还不是语言的一部分。
因此,如果你发现自己有一个不可能实现的重载arrow函数,你应该重构为一个函数语句:
或者使用类型Assert来放松类型检查,使其能够编译:
Playground代码链接