如何在打字稿中为aa子类(React.Component)编写类型定义?

西蒙·利施卡(Simon Lischka)

我试图弄清楚如何为react-highlight(类Highlightable,请参阅此处编写类型定义,扩展Highlightable和添加自定义功能。由于原始的Highlightable JS类是React.Component的子类,因此我还需要在类型定义中使用React.Component的所有方法解决此问题的最佳方法是什么?

这是使用NPM和webpack。我正在关注本教程

我尝试像这样导入和使用组件:

import {Highlightable} from "highlightable";

然后:

<Highlightable
enabled={true}
highlightStyle={{
...

我的目标是能够说:

class MyHighlightable extends Highlightable { ...}

和覆盖方法。这就是为什么我想要一个类型定义。

通过添加declare module "highlightable";src / @ types / highlightable中index.d.ts文件,我设法获得了一个简单的导入工作

现在,当我尝试添加这样的类定义时:

 declare module "highlightable" {
   export class Highlightable {
   }
}

Typescript当然会抱怨React.Component超类缺少的方法

TS2607: JSX element class does not support attributes 
because it does not have a 'props' property.

因此,当使用一个空的类主体进行扩展export class Highlightable extends React.Component<T,T> {,在index.d.ts其中添加方法定义等时,所有内容都可以编译,但是在运行时出现此错误:

Uncaught Error: Element type is invalid: expected a string (for 
built-in components) or a 
class/function (for composite components) but got: undefined.

将Highlightable导入输出到控制台,确认未定义从复制和粘贴方法的定义作出反应的类型定义肯定类型并没有帮助(依然不确定)。

如何解决此问题并提供子类的类型定义?如果不可能,我该如何解决?

西蒙·利施卡(Simon Lischka)

解决了,受到了这篇文章的启发我的类型定义现在看起来像这样:

declare namespace HighlightableNs {
    class Highlightable extends React.Component<any, any> {
    }
}

declare module "highlightable" {
    export default HighlightableNs.Highlightable;
}

子类化时,我使用默认导入:

import Highlightable from "highlightable";

export class HighlightableColorMarked extends Highlightable {

现在可以正常导入自定义类:

import {HighlightableColorMarked} from "./wordselection/HighlightableColorMarked";

如果有人知道为什么这样做是必要的,或者有更优雅的解决方案,请随时发布。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章