TypeScriptでReactを学習しようとしています。少しあいまいなTSエラーが発生し続けるようです。
以下のコードを3つのファイルに記述しましたが、コンパイルして実行すると問題なく機能します。 TypeScriptがこのエラーをスローし続けるので、非常に迷惑です
「タイプ '{id:any; key:any;}'には、タイプ 'ProfileCardProps'に次のプロパティがありません:ログイン、名前」
// Form.tsx
import * as React from 'react';
import Axios from 'axios';
export default class Form extends React.Component<any,any>{
constructor(props: any){
super(props);
this.state = { userName: ""};
}
handleSubmit = (event: React.FormEvent<EventTarget>): void => {
event.preventDefault();
//get request...
.then(resp => {
this.props.onSubmit(resp.data);
console.log(resp.data);
this.setState({userName: ''});
};
public render() {
return(
<div>
<div className="col-sm-12">
<form onSubmit={this.handleSubmit}>
<label>Run lookup:<br />
<input type="text"
value = {this.state.userName}
onChange = {(event) => this.setState({userName: event.target.value})}
placeholder = "Enter Username..." >
</input>
</label>
<button type="submit">Add user info</button>
</form>
<br />
</div>
</div>
);
};
}
// Card.tsx
import * as React from 'react';
interface ProfileCardProps{
login: string;
name: string;
}
const ProfileCard = (props: ProfileCardProps) => {
return(
<div className="card col-xs-1 col-sm-6 col-md-4 col-lg-3">
<div className="profileWrapper">
<div className="userName">
<p>{props.login}</p>
</div>
<div className="user">
<h3>{props.name}</h3>
</div>
</div>
</div>
)
}
const CardList = (props: { cards: { map: (arg0: (card: any) => JSX.Element) => React.ReactNode; }; }) => {
return(
<div className="row">
// This is the line that is throwing the error
{props.cards.map((card: { id: any; }) => <ProfileCard key={card.id} {...card} />)}
</div>
)
}
export default CardList;
// ProfileList
import * as React from 'react';
import Form from './Form';
import CardList from './ProfileCard';
import "./ProfileStyles.scss";
export default class Profiles extends React.Component<any, any>{
state = {
cards: [
{ login: "exampleLogin",
name:"exampleName",
key: 1
},
{ login: "exampleLogin2",
name:"exmapleName2",
key: 2
}
]
}
addNewCard = (cardInfo: any) => {
this.setState((prevState: { cards: { concat: (arg0: any) => void; }; }) => ({
cards: prevState.cards.concat(cardInfo)
}));
}
public render() {
return(
<div className="cardSection">
<h2>Profiles</h2>
<Form onSubmit={this.addNewCard} />
<CardList cards={this.state.cards} />
</div>
)
};
}
カードをProfileCardコンポーネントに渡すとき、その4つの値を小道具で渡します。
{login: string, name: string, key: number, id: number}
しかし、あなたのインターフェースには2つしかありません
interface ProfileCardProps{
login: string;
name: string;
}
キーとIDを追加すると、問題が解決するはずです。
interface ProfileCardProps{
login: string;
name: string;
id:any;
key: any;
}