Машинописный текст, указывающий тип «»Тест»», не может быть присвоен типу «неопределенный»

#reactjs #typescript

Вопрос:

У меня есть простой объект с двумя полями имя и возраст, изначально они определены как неопределенные, а позже в коде будет присвоено значение

 const s={
    name:undefined,
    age:undefined
}
s.name="Test" //error

 

когда я пытаюсь присвоить какое-либо значение своим атрибутам, это приводит к ошибке машинописи

Type '"Test"' is not assignable to type 'undefined'.

Может ли кто-нибудь объяснить, почему я получаю эту ошибку в typescript и как ее исправить

Комментарии:

1. есть ли причина указывать его как неопределенный вместо null ?

2. Вы хотели сделать тип необязательным?

Ответ №1:

Вы явно не определили тип для s , поэтому компилятор пытается вывести его на основе предоставленных значений.

Предполагаемый тип s является:

 {
  name: undefined;
  age: undefined;
}
 

Вы задали явный тип, например:

 type User = {
  name: string | undefined;
  age: number | undefined;
};

const s: User = {
    name: undefined,
    age: undefined
};
s.name = "Test"; //should work

 

Ответ №2:

Если вы посмотрите на предполагаемый тип s , вы увидите, что это

 {
    name:undefined;
    age:undefined;
}
 

введите описание изображения здесь

TypeScript не может сделать вывод, что здесь может быть разрешен какой-либо другой тип, потому что вы не предоставили эту информацию.

Создайте тип:

 interface Person{
    name: string | undefined;
    age: number | undefined;
}
 

затем объявите s с помощью этого типа:

 const s:Person = {
    name: undefined;
    age: undefined;
}
 

Ссылка на игровую площадку