考虑以下函数。
public static convert<T, U>(t: T, conversion: ((toutput: T) => U) = ((t) => t)) {
return conversion(t);
}
Typescript当前抱怨从转换函数返回的toutput参数,这是默认参数:
类型“T”不能分配给类型“U”。'U'可以用一个与'T'无关的任意类型示例化。
我试图让IDE认识到,给定默认参数,T与U相同。
我的用例如下:
convert(1) // returns 1
convert(1, x => ({x})) // returns an object with { x : 1 }
有没有什么方法,任何人都知道沉默的编译器,并能够创建这个函数以上正确?
2条答案
按热度按时间sd2nnvve1#
我认为你可以用重载来实现这一点:
1
被加宽为number
,因为隐式文字类型在返回值的上下文中被加宽(例如,x => ({x})
),这又导致T
被推断为number
。您可以通过显式键入第一个参数来避免这种情况:svgewumm2#
试试这样做:
使用
T
作为U
的默认值,并将conversion
函数的默认值的返回类型强制转换为T & U
。