typescript - 带条件类型的简单函数
问题描述
以下功能很大程度上来自typescript 手册中关于使用条件类型的部分,但它不起作用:
function test<T extends boolean>(a: T): T extends true ? string : number {
return a ? '1' : 1
}
Typescript 报告说:
Type '1 | "1"' is not assignable to type 'T extends true ? string : number'.
Type '1' is not assignable to type 'T extends true ? string : number'.
我想我错过了一些明显的东西。如何构造此函数,以便打字稿根据函数的参数正确推断类型?
我意识到可以使用函数签名重载来解决这个特定问题,但我想了解更多关于条件类型的信息。
解决方案
简短的回答是你不能。没有值可以分配给未解析的条件类型(仍然依赖于自由泛型类型变量的条件类型)。您唯一能做的就是使用类型断言。
function test<T extends boolean>(a: T): T extends true ? string : number {
return (a ? '1' : 1) as any
}
条件类型对于表达参数之间的关系很有用,但在实现函数时它们没有帮助。另一种方法是使用更宽松的实现签名。
function test<T extends boolean>(a: T): T extends true ? string : number
function test(a: boolean): number | string {
return (a ? '1' : 1)
}
推荐阅读
- python - Slicing a range from a pandas dataframe column using loc
- c++ - 未在 C++ 中显示适当的输出
- java - 用 Java 中的相同消息替换 IBM MQ 消息负载并回复(无 JMS)
- reactjs - 传递表单数据来表达
- python - 我可以使用阶跃函数作为损失函数来训练神经网络吗?
- php - Pdf 轮换问题
- r - 如何在 for 循环中使用 ggplot2 aes_string() 和 cut()?
- ios - 如何从我的应用程序中打开设置页面
- java - 为什么无法在jsp中显示两个输入
- visual-studio-code - Visual Studio Code,内联文件夹