gpt4 book ai didi

function - 当函数类型具有不同的参数计数时,有没有办法让 Typescript 认为函数类型不等价?

转载 作者:搜寻专家 更新时间:2023-10-30 21:25:00 25 4
gpt4 key购买 nike

考虑以下代码:

function typeTest(callback:(item1:number, item2:string)=>number):number {
return callback(5, "foo");
}

//This works:
typeTest((num : number, str : string) => { return num;} )
//But surprisingly, so does this, even though the supplied callback doesn't have enough parameters
typeTest((num : number) => { return num;} )

我试图告诉编译器函数“typeTest”接受带有两个参数的回调。但是,如果我给它一个参数较少的回调,它仍然有效。我假设 Typescript 认为定义为“(num : number) => number”的函数实现了“(number, item2)”的函数类型,基本上忽略了第二个参数。这有一定的道理,但我们重新定义了一个回调类型以获取更多参数,并期望编译器告诉我们我们在哪里忘记了重新实现旧的回调。我可能遇到了 Typescript 类型系统的一个基本属性,但是有没有办法告诉编译器,“不,真的 - 传入的函数需要采用所有这些参数”?

编辑:至于动机:在我们的例子中,我们曾经有一个“setSortFunction”方法,该方法需要一个接受单个项目并返回整数的方法。如果您在所有项目中比较该整数,则可以对数组进行排序。后来我们将其更改为接受更标准的“取两个项目,比较它们,然后返回 -1、0 或 1”。所以,现在我们知道一个事实,我们传入的排序函数需要获取两个项目并进行比较。如果他们不这样做,他们可能已经坏了。因此,我们想要一种方法来强制要求 sortFunction 传入接受的两个参数。

最佳答案

However, if I give it a callback with fewer parameters, it still works.

是的。这是设计使然。想一想:调用者调用一个不关心最后几个参数的函数是安全的。这就是 JS 在常规代码库中的工作方式。

这会更清楚一点:https://github.com/Microsoft/TypeScript/wiki/Type%20Compatibility#comparing-two-functions

关于function - 当函数类型具有不同的参数计数时,有没有办法让 Typescript 认为函数类型不等价?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27336393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com