如何检查字符串文字类型是不是包含 TypeScript 中的值?

Posted

技术标签:

【中文标题】如何检查字符串文字类型是不是包含 TypeScript 中的值?【英文标题】:How do I check that String Literal Types contain a value in TypeScript?如何检查字符串文字类型是否包含 TypeScript 中的值? 【发布时间】:2020-02-23 17:11:46 【问题描述】:

我想检查str是否在Name

有可能吗?

/* imagination code */

type Name = 'a1' | 'a2' | .... | 'z100';

function isName(str: string): str is Name 
  switch (str) 
    case 'a1':
    case 'a2':
      // ...
    case 'z100':
      return true;
    default:
      return false;
  


isName('alice') // -> true or false

【问题讨论】:

Typescript: Check "typeof" against custom type的可能重复 【参考方案1】:

您不能从类型转到运行时检查。类型在编译时被擦除,因此您不能在运行时真正使用它们中的任何信息。但是,您可以采用另一种方式,从一个值转到一个类型:

const Name = ['a1', 'a2', 'z100'] as const // array with all values
type Name = typeof Name[number]; // extract the same type as before

function isName(str: string): str is Name 
  return Name.indexOf(str as any) !== -1; // simple check


isName('alice') // -> true or false

【讨论】:

我明白了。谢谢。

以上是关于如何检查字符串文字类型是不是包含 TypeScript 中的值?的主要内容,如果未能解决你的问题,请参考以下文章

检查列是不是包含类型字符串(对象)

如何检查CKEditor中是不是有一些文字?

检查 Enum 中是不是存在字符串

如何检查arraylist中的数组是不是包含某个值?

如何检查图像是不是有任何文字?

如何检查文档字段类型数组中是不是存在元素?扑