У меня есть приведенный ниже код: Где у меня есть тип интерфейса для состояния. Как мне инициализировать его в методе конструктора. Поскольку это не позволяет мне инициализировать строку/ноль/число
interface IState { selectedUser?: IUserMenu}
class AssignUser extends React.Component<IProps, IState>{ constructor(props: IProps) { super(props); this.state = { selectedUser: ' what i have to put here' }}}
Кроме того, что это означает
this.state = {}
в конструкторе функция означает ?
IUserMenu - это интерфейс, поэтому я не могу инициализировать число, '', null,
Единственное, что я могу использовать, это undefined
Ваш интерфейс IState указывает, что у него есть одно свойство, называемое selectedUser
, которое является необязательным (поскольку после него стоит знак ?).
Если вы делать предоставляете selectedUser
, он должен быть типа IUserMenu
. Итак, ваш what i have to put here
— это объект, соответствующий интерфейсу IUserMenu
.
this.state = {} означает инициализацию состояния с помощью объекта, определенного в фигурных скобках. В вашем случае объект, определенный в фигурных скобках, должен соответствовать вашему интерфейсу IState (поэтому содержит одно свойство с именем selectedUser
, которое является undefined
типа IUserMenu
)
Я использую состояние selectedUser в реквизитах Picker selectedUser
Но мне нужно инициализировать это состояние в конструкторе. Но мое значение <item> является объектом. В этом случае, что я должен был инициализировать?
Как выглядит интерфейс IUserMenu? И передается ли один из этих типов в качестве реквизита?
interface IUserMenu { name: string; surname: string; }
Хорошо, мне кажется, нет смысла инициализировать его чем-либо... вы могли бы просто сделать: this.state = { selectedUser: undefined }
или вообще не заморачиваться установкой состояния в конструкторе
Или вы можете даже инициализировать его так: this.state = {selectedUser: { name: "", surname: "" }}
Привет @ankitjayaprakash,
У меня есть пример с вашим случаем, когда я инициализирую объект, который вы хотите передать, описанный в интерфейсе (но не являющийся необязательным)
Вы можете это увидеть здесь
То, что "this.state = {}" служит в конструкторе, предназначено только для инициализации состояния этого компонента, даже если оно может быть отключено без какой-либо функции компоновщика.
Тип «null» не может быть назначен типу «IUserMenu | неопределенный'. Я получаю эту ошибку
У меня это работает без каких-либо ошибок со стороны Typescript, но если вы хотите лучше, откройте CodeSandbox или StackBlitz и скопируйте весь код. Таким образом, мы можем помочь вам лучше.
Спасибо @ fg93 за ваши усилия, я работаю, но получаю предложение TSLint. Хорошо. Спасибо
Вызов
this.state = {}
в конструкторе устанавливает начальное состояние компонента. Возможно, просто передайтеthis.state = {}
, если у вас нет начального значения дляstate.selectedUser
— ваш интерфейс указывает, что это необязательно.