Проверка типов выделенных союзов с добавлением новых типов - PullRequest
3 голосов
/ 06 марта 2019

Допустим, у меня есть следующие типы машинописи:

enum EntityKind {
  Foo = 'foo',
  Bar = 'bar',
}

type Foo = {
  kind: EntityKind.Foo,
  foo: string
}

type Bar = {
  kind: EntityKind.Bar,
  bar: number
}

type Entity = (Foo | Bar) & {
  id: string,
  name: string
}

Я хочу, чтобы у меня была ошибка при проверке типов при добавлении нового типа в мое перечисление.Так что я надеюсь на следующее:

enum EntityKind {
  Foo = 'foo',
  Bar = 'bar',
  Baz = 'baz',
}

, и я получу какую-то ошибку, которая потребует от меня определения нового типа Baz и добавления его в объединение.

Isэто возможно?

1 Ответ

1 голос
/ 06 марта 2019

Если вы хотите получить ошибку в типе Entity, вы можете добавить другой тип к перекрестку, для которого требуется EntityKind для расширения EntityUnion['kind']:

enum EntityKind {
  Foo = 'foo',
  Bar = 'bar',
}

type Foo = {
  kind: EntityKind.Foo,
  foo: string
}

type Bar = {
  kind: EntityKind.Bar,
  bar: number
}
type Check<T, U extends T> = {}

type EntityUnion = Foo | Bar 
type Entity = EntityUnion & {
  id: string,
  name: string
} & Check<EntityUnion['kind'], EntityKind>
...