我想象了这段代码
let x: (a: { b: number }) => void = (a: { b: number, c: string }) => { alert(a.c) };
x({ b: 123 });
应该产生错误,因为lambda函数需要a
参数的附加属性,因此签名不应该兼容。但是在最新的打字游戏场中尝试这个并不会产生任何错误!那是为什么?
答案 0 :(得分:0)
当你说
时 let x: (a: { b: number }) => void
您说“x是一个带有b
键的对象的函数。”
然后,您为它分配了一个lambda,该lambda接受了一个带有b
键和c
键的对象。这会传递类型检查器,因为传入的任何对象都必须有b
密钥。
然后使用b
键传递一个对象。没有错误。
如果您希望它因c
密钥而失败,请将x
的类型设为以下内容:
let x: (a: { b: number, c: string }) => void