Ошибка: Тип '{}' отсутствует следующие свойства из типа - PullRequest
0 голосов
/ 07 февраля 2020
interface Person {
  name: string;
  surname: string;
}
let person1: Person = {};

person1.name = "name"
person1.surname = "surname"

Когда я объявляю person1, я получаю эту ошибку:

Type '{}' is missing the following properties from type Person

Ответы [ 2 ]

0 голосов
/ 07 февраля 2020

Вы определили интерфейс с двумя обязательными свойствами. Поэтому, когда вы определяете объект с типом интерфейса Person, вы должны сразу определить эти свойства следующим образом:

let person: Person = {
    name: '',
    surname: ''
}

Однако, если вы считаете, что эти свойства не обязательны, а являются необязательными, вы можете изменить свой интерфейс на это:

interface Person {
    name?: string;
    surname?: string;
}

Используя синтаксис ?, вы помечаете свойство как необязательное. Затем должен работать следующий код:

let person: Person = {};
0 голосов
/ 07 февраля 2020

Это лучший способ:

let person1: Person = {name: '', surname: ''};

Но если вы хотите точно пустой объект, вы можете взломать его следующим образом:

let person1: Person = {} as Person;

Обновление после комментария:

Посмотрите на это unpredictableFunction:

const unpredictableFunction = (): string|number:string[] => {
  return Math.random() > 0.5 ? 'string' : Math.random() > 0.5 ? 9999 : ['1', '2', '3']
};

Может возвращать число, возвращать строку или массив строк

const person: Person = {name: '', surname: ''};
person.name = unpredictableFunction (); // this is a case you are talking about

В этом случае вы увидите

Type 'string | number | string[]' is not assignable to type 'string'.

Ответы:

Посмотрите на свой код и убедитесь, что вы присваиваете только свойства свойств Person,

Или обновите интерфейс, чтобы готов к другим значениям:

interface Person {
  name: string | number | string[];
  surname: string; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...