Типы объединения в интерфейсе. Свойство «_seconds» не существует для типа «Дата». - PullRequest
1 голос
/ 28 апреля 2020

У меня два интерфейса:

interface Timestamp {
  _seconds: number;
  _nanoseconds: number;
}

interface Item {
  createdAt: Timestamp | Date;
}

Но после компиляции я получил ошибку:

Property '_seconds' does not exist on type 'Timestamp | Date'.

Что я сделал не так?

1 Ответ

3 голосов
/ 28 апреля 2020

Вы пытаетесь получить доступ к _seconds на item.createdAt, однако, поскольку это тип объединения , TS не знает, является ли его значение во время выполнения Timestamp или Date, поэтому он предупреждает вас, что если это Date, _seconds будет неопределенным.

Вы можете использовать оператор in, чтобы проверить наличие свойства, в этом случае TS будет сужаться createdAt введите Timestamp, и теперь вы можете получить доступ к _seconds без ошибок из компилятора:

if ('_seconds' in item!.createdAt) {
    item!.createdAt._seconds;
}

Playground Link

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