如何检查该值是否属于打字稿类型?

问题描述 投票:0回答:1

有这样的东西

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
1个回答
3
投票

在 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);
}
© www.soinside.com 2019 - 2024. All rights reserved.