Разница между пересечением и объединенными типами `{foo} & {bar}` и `{foo, bar}` в TypeScript - PullRequest
3 голосов
/ 20 апреля 2020

Рассмотрим типы FooBar1 и FooBar2, определенные следующим образом:

type Foo = { foo: string };
type Bar = { bar: number };
type FooBar1 = Foo & Bar;
type FooBar2 = { foo: string; bar: number };

Вопрос: В чем разница между FooBar1 и FooBar2?


Моя попытка / исследование:

  • Они назначаются друг другу в двух направлениях! (проверено вручную и с помощью tsd - см. здесь )
  • Тем не менее, они не идентичны друг другу! (проверено с помощью tsd - см. здесь )

Другой способ убедиться в том, что intellisense VSCode не сворачивается { foo } & { bar } автоматически в { foo, bar } (хотя он свернет другие сложные типы в более простые формы, такие как NonNullable<string | undefined> до string):

VSCode screenshot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...