首页 > 解决方案 > 我可以确定一个值是否与类型别名匹配吗?

问题描述

在 TypeScript 中,我可以确定一个值是否/匹配类型别名吗?

说我有这种类型:

export type Name = "Jane" | "John";

然后在其他地方我想检查某个用户输入是否属于该Name类型。之类的东西是if (input instanceOf Name)行不通的。

这甚至可能吗?

标签: typescripttype-alias

解决方案


您无法检查值是否与类型别名匹配。类型在运行时被擦除,因此任何运行时代码都不能依赖它们。

如果您控制类型别名,我建议您创建一个数组来保存值,让 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;
}

游乐场链接


推荐阅读