编译以下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
与要求是兼容的-第二个参数将被忽略。
但是我有一个场景,其中第二个参数是一个数据库事务,我不希望能够传递一个忽略事务的函数。
我是否可以对类型定义或编译器选项做一些会导致此代码编译器错误的事情?
1条答案
按热度按时间z4iuyo4d1#
这是TS中的一个已知问题,已经进行了广泛讨论。
您的问题是
const foo:F2 = f1;
完全有效。可以阅读有关以下内容的FAQ条目:为什么参数较少的函数可以赋值给参数较多的函数?
如果你想要一个关于它的问题列表,检查this one!
无论如何,最好的替代方法是将所有参数传递到单个对象中,以确保获得所有参数。