在反应类型中,我们发现以下内容:
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代码
有没有正确的方法呢?
谢谢
不可能覆盖这样的类型别名。相反,在相同的模块名称下声明自己的StatelessComponent
接口,它将与原始接口合并。这是正确的语法:
declare module "dummy" {
module "react" {
interface StatelessComponent<P = {}> {
fragment?: any;
}
}
}
如this thread中所述,需要使用外部模块声明来使内部模块声明为“扩充”而不是遮蔽原始模块。遗憾的是,这个伎俩没有正确记录AFAIK。