是否存在使用TypeScript的React prop类型具有函数类型的最佳实践?
我认为这是可行的,但实际上它是错误的:
type Props = {
onClick: Function
};
const Submit = ({ onClick }: Props) => {
return (
<button type="button" onClick={onClick}>
click me
</button>
);
在此线程之后,我开始使用它了,但似乎不必要地冗长: https://github.com/Microsoft/TypeScript/issues/20007
type Props = {
onClick: (...args: any[]) => any;
};
const Submit = ({ onClick }: Props) => {
return (
<button type="button" onClick={onClick}>
click me
</button>
);
答案 0 :(得分:0)
您可以像这样简单地编写它,这样可以防止出现任何问题,并且更具说服力。特别是对于自定义功能:
界面道具{ onClick :(事件:e)=>无效; }
这将告诉调用组件,onClick期望什么以及参数是什么。
希望这会有所帮助。编码愉快。
答案 1 :(得分:0)
Function
非常通用,不提供任何(强)类型安全性。在您的链接中,一位贡献者甚至说,调用函数是不安全的。相反,像这样包含TypeScript的键入功能更有意义:
type Props = {
onClick: (event: React.MouseEvent<HTMLElement>) => void
};
现在,您知道参数为MouseEvent
,返回类型为void
,将其标记为回调。 void
是any
类型的限制性更强的子类型。因此,您不会碰巧通过回调返回值,该值在any
类型下有效(您可以从字面上返回任何内容)。
就最佳实践而言,tslint
对Function
类型的抱怨是正确的:
请勿将“函数”用作类型。避免使用
Function
类型。首选特定的函数类型,例如() => void
。tslint(ban-types)
PS:点击事件处理程序也有一种预定义的类型:
type Props = {
onClick: React.MouseEventHandler<HTMLElement>
};
希望,会有所帮助。