代码之家  ›  专栏  ›  技术社区  ›  Daniel Khoroshko

如何扩展反应.SFC键入typescript

  •  1
  • Daniel Khoroshko  · 技术社区  · 6 年前

    在react键入中,我们发现以下内容:

    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代码

    有合适的方法吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Matt McCutchen    6 年前

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

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

    需要使用外部模块声明来使内部模块声明成为“扩充”,而不是隐藏原始模块,如中所述 this thread . 不幸的是,这个把戏还没有被正确地记录下来。