как тут правильно слить - PullRequest
0 голосов
/ 10 июля 2020

рассмотрите эту настройку:

interface A { x: string }
interface B { y: string }

type AB = A & B


class Merger<T extends AB> {
  merge(a: A): void {
    const 
      b: B = { y: 'hello' },
      ab: T = { ...a, ...b } //compile error see below
    ; 
  }
}

Здесь ошибка:

Type '{ y: string; x: string; }' is not assignable to type 'T'.
'{ y: string; x: string; }' is assignable to the constraint of type 'T', 
    but 'T' could be instantiated with a diff

Если я все правильно понимаю, значит ли это, что AB может иметь больше свойств? В основном я хочу добавить некоторые фиксированные свойства к A, например отметку времени. Как я мог обойти эту ошибку

1 Ответ

0 голосов
/ 10 июля 2020

Итак, согласно сообщению об ошибке, вам нужен экземпляр T, поэтому:

interface A { x: string }
interface B { y: string }
type AB = A & B

interface T extends AB {
}

class Merger {
    merge(a: A): void {
        const b: B = { y: 'hello' }
        const ab: T = { x: "a", y: 'b' };
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...