如何在typescript中扩展React.SFC类型

问题描述 投票:1回答:1

在反应类型中,我们发现以下内容:

type SFC<P = {}> = StatelessComponent<P>;
interface StatelessComponent<P = {}> {
    (props: P & { children?: ReactNode }, context?: any): ReactElement<any> | null;
    propTypes?: ValidationMap<P>;
    contextTypes?: ValidationMap<any>;
    defaultProps?: Partial<P>;
    displayName?: string;
}

我想用属性fragment扩展它。我在我的index.d.ts文件夹中创建了typings/react,但无法弄清楚如何正确扩展类型,因此它不会破坏其余的代码。我尝试过类似的东西:

declare module "react" {
  import React, { SFC as ReactSFC} from "react";

  export type SFC<P = {}> = ReactSFC<P> & { fragment: any };

  export = React;
}

但它基本上打破了JSX代码

有没有正确的方法呢?

谢谢

reactjs typescript
1个回答
2
投票

不可能覆盖这样的类型别名。相反,在相同的模块名称下声明自己的StatelessComponent接口,它将与原始接口合并。这是正确的语法:

declare module "dummy" {
  module "react" {
    interface StatelessComponent<P = {}> {
      fragment?: any;
    }
  }
}

this thread中所述,需要使用外部模块声明来使内部模块声明为“扩充”而不是遮蔽原始模块。遗憾的是,这个伎俩没有正确记录AFAIK。

© www.soinside.com 2019 - 2024. All rights reserved.