我试图弄清楚如何为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导入输出到控制台,确认未定义。从复制和粘贴方法的定义作出反应的类型定义肯定类型并没有帮助(依然不确定)。
如何解决此问题并提供子类的类型定义?如果不可能,我该如何解决?
解决了,受到了这篇文章的启发。我的类型定义现在看起来像这样:
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] 删除。
我来说两句