Typescript将空函数反映为defaultProps

Fab*_*ice 5 typescript reactjs typescript-typings typescript2.0

我有一个无状态功能组件,带有一个可选的函数参数作为属性(onClick),我试图将一个空函数定义为默认属性,以便能够在我的组件中安全地执行:

 <span onClick={props.onClick} />
Run Code Online (Sandbox Code Playgroud)

但我有以下错误:"表达预期."

interface IProps {
  size?: sizeType;
  onClick?: (e:any) => void;
}
const Foo: React.SFC = (props: IProps) => {
  // ...
};
const defaultProps: IProps = {
   size: 'default',
   onClick: () => void <-- Expression expected.
};
Foo = defaultProps;
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?

小智 13

您不能void在javascript中使用返回值.而不是void,null用作返回值.

onClick: () => null
Run Code Online (Sandbox Code Playgroud)


Rem*_*sen 9

您可以使用以下内容:

const defaultProps: IProps = {
   size: 'default',
   onClick: () => void(0)
};
Run Code Online (Sandbox Code Playgroud)


小智 6

我认为使用 lodashes noop 可能是一个不错的选择,因为根据组件在访问 prop 之前重新渲染的次数,它将创建对匿名函数的许多引用,该函数本质上是一个占位符您需要的功能。就像是:

import noop from 'lodash/noop';
MyComponent.defaultProps = {
  myfunc: noop,
};
Run Code Online (Sandbox Code Playgroud)

这是一个小的优化,但也阻止开发人员为每个需要 func 的默认 prop 声明创建匿名函数。