3
function myFunc({ param1 }: {
param1: number;
}) {
// param1 is marked as mandatory in the definition, but we can bypass that
}
const mismatchedFunc: ({}) => void = myFunc;
mismatchedFunc({}); // No compile-time error
我猜测,对于这种现象的原因,从打字稿的结构型性质茎函数调用使用结构类型和变量重新分配到旁路类型检查,在{ param1: number }
结构“适合“{}
。与“命名参数”
然而,这是不是不受欢迎的行为(在这种情况下,或类的情况下),因为它在很大程度上绕过了TypeScript提供的类型检查?
这应该作为一个错误提交吗?
编辑1
由于@shusson指出,行为(如V2.X)的预期(由于权衡),即使它是不可取的。
有关该问题根源的最相关讨论,请参阅this GitHub issue和follow-up proposal以尝试解决该问题。
所以双变量函数参数是一种不受欢迎的行为,但这是一种预期并且是权衡的结果。那是对的吗? – pleasedesktop
是的,这是我的理解。 TypeScript有他们的文档称为“不健全”的行为,这是不可避免的,但仔细考虑。我认为这些问题大部分都是由于TypeScript与JavaScript结合而引起的(在我看来这是一件好事)。 – shusson