我可以在TypeScript函数类型中设置参数为“required”吗?

2wnc66cl  于 2023-02-20  发布在  TypeScript
关注(0)|答案(1)|浏览(767)

编译以下TypeScript代码

const f1 = (x: string) => { console.log(x) }
type F2 = (x: string, y: string) => void;

const callF2 = (fn: F2) => {
    fn("a", "b");
}

callF2(f1)

所以callF2需要一个带两个参数的函数作为输入,但是我可以传递只带一个参数的f1,这是很好的,因为f1与要求是兼容的-第二个参数将被忽略。
但是我有一个场景,其中第二个参数是一个数据库事务,我不希望能够传递一个忽略事务的函数。
我是否可以对类型定义或编译器选项做一些会导致此代码编译器错误的事情?

z4iuyo4d

z4iuyo4d1#

这是TS中的一个已知问题,已经进行了广泛讨论。
您的问题是const foo:F2 = f1;完全有效。
可以阅读有关以下内容的FAQ条目:为什么参数较少的函数可以赋值给参数较多的函数?
如果你想要一个关于它的问题列表,检查this one
无论如何,最好的替代方法是将所有参数传递到单个对象中,以确保获得所有参数。

相关问题