typescript - 返回类型的类型检查
问题描述
我有以下代码:
interface Box<T> {
value: T | null;
}
function foo<T>(b: Box<T>, defaultVal: T): T {
return b.value || defaultVal;
}
const s: string | null = null;
const t = foo({ value: s }, { value: "def" });
console.log(t);
为什么会这样编译?我希望在第二个参数上出现类型错误。
解决方案
这是因为即使s
有类型签名,它的类型也会因为赋值string | null
而缩小。null
如果您将鼠标悬停在 上,您可以看到这一点s
。如果您将鼠标悬停在 上foo
,则显示T
选择为{value: string}
,这使应用程序类型正确。
对于s
具有实际联合类型的,您将收到预期的错误:
const test = (s: string | null) => {
const t = foo({ value: s }, { value: "def" }); // Error, as expected
}
推荐阅读
- django - Django rest框架,如何重定向到其他视图集作为发布请求
- flutter - 容器在颤振中的自动高度
- azure - Azur IoT Edge 中心无法启动
- java - 在链表中插入节点
- c# - C# .NET Core 3.1 无法建立 SSL 连接
- android - 无法解析 com.google.guava:guava:30.1-jre - Gradle 项目同步失败。基本功能将无法正常工作 - 在 kotlin 项目中
- xml - 如何通过特定后缀的xml文件中的所有对象?
- python - 如何在 unix 服务器上的 docker 容器中保持启动过程
- javascript - 如何从角度模型中获取json数据
- javascript - 用javascript排序表