Как проверить, что строковые литеральные типы содержат значение в TypeScript? - PullRequest
0 голосов
/ 28 октября 2019

Я хочу проверить, есть ли 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

1 Ответ

2 голосов
/ 28 октября 2019

Нельзя перейти от проверки типа к проверке во время выполнения. Типы стираются во время компиляции, поэтому вы не можете использовать в них какую-либо информацию во время выполнения. Однако вы можете пойти другим путем, от значения перейти к типу:

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

...