为什么这个lambda函数不是打字稿中的错误?

时间:2017-01-16 09:32:37

标签: javascript typescript types

我想象了这段代码

let x: (a: { b: number }) => void = (a: { b: number, c: string }) => { alert(a.c) };
x({ b: 123 });

应该产生错误,因为lambda函数需要a参数的附加属性,因此签名不应该兼容。但是在最新的打字游戏场中尝试这个并不会产生任何错误!那是为什么?

1 个答案:

答案 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