Свойство ‘props’ не существует для типа IntrinsicAttributes

#javascript #reactjs #typescript

#javascript #reactjs #typescript

Вопрос:

Я не уверен, почему я получаю сообщение об ошибке:

 TypeScript error in /home/amanuel2/tutorial/go/react-go/src/frontend/src/App.tsx(34,15):
Type '{ props: string[]; }' is not assignable to type 'IntrinsicAttributes amp; string[]'.
  Property 'props' does not exist on type 'IntrinsicAttributes amp; string[]'.  TS2322
 

Код:

 function App() {

  const [ChatHistory, setChatHistory] = useState<string[]>([])
  useEffect(() => {
    connect((msg: string) => {
      console.log("New Message")
      setChatHistory([...ChatHistory, msg])
    })
    console.log(ChatHistory)
    return () => { }
  }, [])

  
  
  return (
    <div className="App">
      <Header />
      <header className="App-header">
        <Chat props={ ChatHistory }/>
        <button type="submit" onClick={()=>sendMsg("Hello")}>
          Hello
        </button>
      </header>
    </div>
  );
}
 

И

 const Chat = (props: string[]) => {
  const msgs = props.map((msg:any, idx:any) => (
    <p key={ idx }>
      { msg }   
    </p>
  ))
  return (
    <div className="ChatHistory">
      <h3> Chat History </h3>
      { msgs }
    </div>
  )
}
 

Ответ №1:

Ваша строка <Chat props={ ChatHistory }/> передает тип { props: string[] } в качестве первого аргумента (вызываемого props ) в Chat компонент, но Chat ожидает, что он будет string[] (from const Chat = (props: string[]) => { ) .

Вместо этого вы можете изменить ожидаемый тип реквизита чата:

 const Chat = (props: {props: string[]})
 

Теперь это не очень хороший стиль, поскольку имя props должно использоваться только для указания всех атрибутов в этом объекте.
Таким образом, вместо этого вы можете переименовать ChatHistory prop, который передается в чат:

 render() {
  // ...
  <Chat chatHistory={ChatHistory}/>
}

// ...
const Chat = (props: {chatHistory: string[]}) {
  props.chatHistory.map(  // ...
}