Как бороться с невидимыми ключами в TypeScript? - PullRequest
0 голосов
/ 22 апреля 2020

Я работаю над функцией TypeScript для объединения двух объектов. Проблема в том, что объекты TypeScript могут содержать дополнительные ключи, которые не видны в сигнатуре типа. Есть ли способ отбросить такие дополнительные элементы, чтобы ограничить объекты их известными свойствами?

import * as assert from 'assert';

const merge = <A, B>(a: A, b: B): A & B => ({
  ...a,
  ...b,
})

type Foo = { foo: 123 }
type Bar = { bar: 456 }

const assertFoo = <T extends Foo>(t: T) => t
const assertBar = <T extends Bar>(t: T) => t

const foo: Foo = assertFoo({ foo: 123 })
const bar: Bar = assertBar({ foo: 'MINE', bar: 456 })

type FooBar = { foo: 123, bar: 456 }
const foobar: FooBar = merge(foo, bar);

assert.equal(foobar, { foo: 123, bar: 456 }); // Error: foo is 'MINE'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...