有这样的东西
type Size = 'big' | 'small';
如果值为 Size,我如何测试该“测试”
const test = 'equal';
if(test in Size){
//no luck, 'Size' only refers to a type, but is being used as a value here
}
我可以将类型 Size 转换为数组键或枚举吗?
我将类型重构为枚举的唯一选择吗?
谢谢你
在 TypeScript 中,所有类型都会被删除。它们在运行时不可用。
但是,由于所讨论的类型
'big' | 'small'
是基于值的,因此这里的方法是从值开始,并根据需要使用它们生成类型信息。
首先我们创建一个有效大小字符串的数组
// inferred type: readonly ['big', 'small']
const sizes = ['big', 'small'] as const;
上面的
as const
类型断言可以推断出每个数组元素的精确类型,从而使我们能够编写
// big' | 'small'
export type Size = typeof sizes[number];
计算所有可能的数组元素的联合类型,换句话说,
Size
是类型'big' | 'small'
。
我们将使用 Array.prototype.includes 来执行运行时检查。
完整示例:
export const sizes = ['big', 'small'] as const;
export type Size = typeof sizes[number];
export function isSize(value: string): value is Size {
return sizes.includes(value);
}
const test = 'equal';
if (isSize(test)) {
console.log(true);
}