typescript - 我可以确定一个值是否与类型别名匹配吗?
问题描述
在 TypeScript 中,我可以确定一个值是否/匹配类型别名吗?
说我有这种类型:
export type Name = "Jane" | "John";
然后在其他地方我想检查某个用户输入是否属于该Name
类型。之类的东西是if (input instanceOf Name)
行不通的。
这甚至可能吗?
解决方案
您无法检查值是否与类型别名匹配。类型在运行时被擦除,因此任何运行时代码都不能依赖它们。
如果您控制类型别名,我建议您创建一个数组来保存值,让 TS 为其推断类型,并从中派生联合。然后,您可以检查一个值是否在数组中:
const Name = ["Jane", "John"] as const
export type Name = typeof Name[number];
function isName(a: unknown): a is Name {
return Name.indexOf(a as Name) != -1;
}
推荐阅读
- cmake - 在复杂的 CMake 项目中使用多个柯南配置
- ios - 当用户想要多次购买单一服务时使用什么类型的货币化
- c# - C# Perforce P4 API:Client.GetSyncedFiles 导致异常
- sql - SQL如何对同一列中的两行求和
- python - 如何使用 csv 模块写入特定单元格?
- unix - 使用“一切都是文件”设计原则和 Unix 哲学的其余部分从平面文件创建和查询数据
- node.js - 无法使用发送到服务器的数据
- flutter - 未处理的异常:输入“未来”
' 不是类型 'String' 的子类型 - django - Django:如何编辑旧模型以使 PK 可序列化
- git - Gitlab CI:从推送/合并中获取所有提交更改