首页 > 解决方案 > 存在装饰器时忽略重载丢失

问题描述

我在 React 中使用带有 TypeScript 的实验性装饰器。

我用于表单的库来自 Ant Design,装饰器form向我的组件插入了一个属性。

我有这样的Component声明:

interface IProps {
  form: any
}
@Form.create()
class Component extends React.Component<IProps> { ... }

现在,当我想在没有这样的form属性的情况下使用该组件时

<Component/>

我收到以下 TS 错误

TS2769

没有重载匹配此调用。

Overload 1 of 2, '(props: Readonly): Component', 给出了以下错误。“{}”类型中缺少属性“form”,但在“只读”类型中是必需的。

Overload 2 of 2, '(props: IProps, context?: any): Component',给出了以下错误。“{}”类型中缺少属性“form”,但在“只读”类型中是必需的。

现在我可以form使用符号使属性为可选?,但它不是很好,当我想进一步输入form

interface IFields {
    "name": string;
}
interface IProps extends FormComponentProps<IFields> { ... }

它真的变得不可行。

我必须以什么方式告诉 TypeScript 该form属性是通过装饰器注入的?

标签: reactjstypescripttypescript-decorator

解决方案


推荐阅读