下面是一段代码(playground,Typescript 5.0.4),它接受一个泛型函数,并根据类型执行一些操作:
type TypeToValue = {
one: number;
two: string;
};
function MyFunction<T extends keyof TypeToValue>(
value: TypeToValue[T],
type: T,
) {
if (type === 'one') return value.toFixed(2); // fail "Property 'toFixed' does not exist on type 'string | number'."
if (type === 'two') return value.toString()
throw Error('invalid type')
}
但是,我希望它不会失败,因为Typescript应该知道在type === 'one'
之后,泛型T
是'one'
,因此value类型为number
。
我的推理正确吗?是否有自动推断类型的解决方法?
谢谢!
2条答案
按热度按时间7cjasjjr1#
我认为这个推论不够聪明,无法理解正确的类型。然而,这只是我的拙见。
无论如何,这里有一个稍微不同的版本,它只是在运行时计算类型。这也保证了正确的推理。
也不需要第二个理由。
k75qkfdt2#
你需要一些更通用的东西来完成你的任务。Playground