ошибка TS2339: свойство 'items' не существует для типа 'Readonly ‹{}›'. usnig реагирует в SPX

Я работаю над проблемой SPFX, используя реакцию, и все время получаю сообщение об ошибке: - Ошибка - typescript - src \ webparts \ reactReadWebpart \ components \ ReactReadWebpart.tsx (101,25): ошибка TS2339: свойство 'items' не существует для типа 'Только для чтения ‹{}>'. См. Скриншоты ниже

export 
default class
ReactReadWebpart
extends 
React.Component<IReactReadWebpartProps, {}> {

  public
constructor(props:
IReactReadWebpartProps,
state:
IReactReadWebpartState){ 

    super(props); 

    this.state
= {  

      items: [ 

        { 

         
"EmployeeName":
"", 

         
"EmployeeId":
"", 

         
"Experience":"", 

         
"Location":""

        } 

      ]  

    };  

  } 

ошибка в state.items ниже

{this.state.items.map(function(item,key){ 

              

              
return (<div
className={styles.rowStyle}
key={key}> 

                  
<div
className={styles.CellStyle}>{item.EmployeeName}</div> 

                  
<div
className={styles.CellStyle}>{item.EmployeeId}</div> 

<div
className={styles.CellStyle}>{item.Experience}</div>

<div
className={styles.CellStyle}>{item.Location}</div>

        

                
</div>); 

             })} 

заранее спасибо


person naijacoder    schedule 15.01.2018    source источник


Ответы (1)


Отложив в сторону первоклассное форматирование кода в вашем вопросе, вы получаете сообщение об ошибке, потому что состояние компонента описывается как пустой объект в этой строке

React.Component<IReactReadWebpartProps, {}> 

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

person Daniel Khoroshko    schedule 16.01.2018
comment
Спасибо, Даниэль, но у меня уже есть этот интерфейс экспорта интерфейса IReactReadWebpartState {items: [{EmployeeName:, EmployeeId:, Experience :, Location:}]} Все еще очень новичок в этом, если вы можете помочь - person naijacoder; 16.01.2018
comment
Привет! Очень хороший! Ваш интерфейс не совсем правильный, он должен быть похож на interface Item { EmployeeName: string; EmployeeId: string } interface IReactReadWebpartState { items: Item[]; } . Затем вы должны упомянуть его как второй аргумент универсального типа вашего класса React.Component<IReactReadWebpartProps, IReactReadWebpartState> . Также обычно рекомендуется не ставить I перед интерфейсами в машинописном тексте, потому что это не добавляет им никакого дополнительного смысла! Удачи! - person Daniel Khoroshko; 16.01.2018
comment
Спасибо, Даниэль. Даст ему шанс - person naijacoder; 18.01.2018