我正在尝试向 scrumpy/tiptap 添加自定义扩展,但我的项目使用的是打字稿,我认为这给我带来了一些问题。
我从这个问题中得到了代码,并尝试像这样导入和使用它:
import HighlightMark from '../ts/tiptap-extensions/HighlightMark';
...
this.editor = new Editor({
content: '<p>This is just a boring paragraph.</p>',
extensions: [new HighlightMark()]
})
但我面临这个错误
类型“HighlightMark”不可分配给类型“ExtensionOption”。类型“HighlightMark”不可分配给类型“Mark”。'schema.toDOM(...)' 返回的类型在这些类型之间不兼容。类型 '(string | number | { style: string; })[]' 不可分配给类型 'DOMOutputSpec'。类型“(string | number | { style: string; })[]”中缺少属性“0”,但在“DOMOutputSpecArray”类型中是必需的。
我尝试在 .d.ts 中导入它(因为我必须使用所有内置的 Tiptap 扩展),但我收到一个错误,告诉我我无法从此处的相对路径导入文件:
环境模块声明中的导入或导出声明不能通过相对模块名称引用模块。ts(2439)
我也尝试将文件更改为打字稿(HighlightMark.ts
),但它给了我几个错误:
'HighlightMark' 类型中的属性 'commands' 不能分配给基本类型 'Mark' 中的相同属性。类型 '({ type }: { type: any; }) => (attrs: any) => Command' 不可分配给类型 '({ type, schema, attrs }: { type: MarkType; schema: MarkSpec; attrs : { [key: string]: string; }; }) => CommandGetter'。类型 '(attrs: any) => Command' 不可分配给类型 'CommandGetter'。
和
'mark' 已声明,但其值从未被读取。ts(6133) 参数 'mark' 隐含地具有 'any' 类型。ts(7006)
和
参数“attrs”隐式具有“任何”类型.ts(7006)
有没有人这样做过?真的有可能吗?
这是来自 HighlightMark.js 的代码:
import { Mark } from 'tiptap';
import { toggleMark } from 'tiptap-commands'
export default class HighlightMark extends Mark {
get name() {
return "mark";
}
get schema() {
return {
attrs: {
color: {
default: "rgba(240,87,100,0.7)"
}
},
parseDOM: [
{
tag: "mark"
}
],
toDOM: mark => [
"mark",
{
style: `background: red` // ${mark.attrs.color}
},
0
]
};
}
commands({ type }) {
return attrs => toggleMark(type, attrs);
}
}