TypeScript-react-eslint
プロジェクトを設定しようとしていますが、このボイラープレートコンポーネントのeslintエラーを回避できません。
import * as React from "react";
interface ButtonProps {
children?: React.ReactNode,
onClick?: (e: any) => void,
}
const styles = {
border: "1px solid #eee",
borderRadius: 3,
backgroundColor: "#FFFFFF",
cursor: "pointer",
fontSize: 15,
padding: "3px 10px",
margin: 10
};
const Button: React.FunctionComponent<ButtonProps> = props => (
<button onClick={props.onClick} style={styles} type="button">
{props.children}
</button>
);
Button.defaultProps = {
children: null,
onClick: () => {}
};
export default Button;
エラーは:
19:26 error 'onClick' is missing in props validation react/prop-types
20:12 error 'children' is missing in props validation react/prop-types
Htmlのインターフェイスについて不満があるようです<button>
が定義されていませんか?そうでなければ、それはButton
コンポーネント自体かもしれませんが、私がそこに渡す<ButtonProps>
インターフェースから型情報を取得すべきではありませんか?
children
とonClick
を次のように明示的に設定してみました。
Button.propTypes = {
children?: React.ReactNode,
onClick?: (e: any) => void
};
eslintエラーはバイパスされますが、コンポーネント自体は動作を停止します。何が悪いのですか?
追伸これは私の.eslintrc.json
です
{
"env": {
"browser": true,
"commonjs": true,
"es6": true
},
"extends": [
"eslint:recommended",
"plugin:react/recommended",
"plugin:@TypeScript-eslint/eslint-recommended"
],
"globals": {
"Atomics": "readonly",
"SharedArrayBuffer": "readonly"
},
"settings": {
"react": {
"pragma": "React",
"version": "detect"
}
},
"parser": "@TypeScript-eslint/parser",
"parserOptions": {
"ecmaFeatures": {
"jsx": true
},
"ecmaVersion": 2018,
"sourceType": "module"
},
"plugins": [
"react",
"@TypeScript-eslint"
],
"rules": {
"indent": [
"error",
2
],
"linebreak-style": [
"error",
"unix"
],
"quotes": [
"error",
"double"
],
"semi": [
"error",
"always"
]
}
}
私はコンポーネントを次のように書き直しました:
const Button = ({ children, onClick }: ButtonProps) => {
return <button onClick={onClick} style={styles} type="button">
{children}
</button>;
};
: React.FC<ButtonProps>
一部はeslintによって無視されたため、小道具タイプをより簡単な方法で提供することにしました