#reactjs #typescript
#reactjs #typescript
Вопрос:
Есть несколько похожих вопросов, но моя ситуация иная. Я работаю над текстовым редактором, и это мой код:
const LIST_TYPES = ["numbered-list", "bulleted-list"];
const toggleBlock = (editor: Editor, format: string) => {
const isActive = isBlockActive(editor, format);
const isList = LIST_TYPES.includes(format);
// Wrap nodes at the specified location in the element container. If no location is specified, wrap the selection.
Transforms.unwrapNodes(editor, {
match: (n: Node) =>
LIST_TYPES.includes(
!Editor.isEditor(n) amp;amp; SlateElement.isElement(n) amp;amp; n.type
),
split: true,
});
const newProperties: Partial<SlateElement> = {
type: isActive ? "paragraph" : isList ? "list-item" : format,
};
Transforms.setNodes(editor, newProperties);
if (!isActive amp;amp; isList) {
const block = { type: format, children: [] };
Transforms.wrapNodes(editor, block);
}
};
match()
принимает Node в качестве аргумента. Я передал правильный тип. Однако в этом выражении !Editor.isEditor(n) amp;amp; SlateElement.isElement(n) amp;amp; n.type
, когда я навожу курсор на каждое состояние, .isEditor(n)
, .isElement(n)
и n.type
выдает мне то же предупреждение: «Аргумент типа ‘unknown’ не может быть присвоен параметру типа ‘string'», хотя я передал правильный тип в качестве аргумента. Я не понимаю, откуда берется «unknown».
это тип для unwrapNodes()
unwrapNodes(editor: import("..").Editor, options: {
at?: import("..").Path | import("..").Point | import("..").Range | undefined;
match?: ((node: import("..").Node) => boolean) | undefined;
mode?: "highest" | "lowest" | "all" | undefined;
split?: boolean | undefined;
voids?: boolean | undefined;
}): void;
Я думаю, что проблема в includes()
. Каким-то образом он не оценивает это !Editor.isEditor(n) amp;amp; SlateElement.isElement(n) amp;amp; n.type
. Потому что это работает : match: (n: Node) => LIST_TYPES.includes(n.type as string)
Комментарии:
1. Что такое
Editor
?2. Что такое Transformes.unwrapNodes ? Не могли бы вы, пожалуйста, поделиться воспроизводимым примером?
3. @ritaj Я просыпаюсь в текстовом редакторе. редактор представляет полный документ в текстовом редакторе. Похоже, я не вставил полную функцию. я обновляю вопрос
4. @captain-yossarian Я обновляю вопрос с помощью unwrapNodes.
Ответ №1:
Я думаю, что я понял, просто обернув логический оператор и присвоив его как string
Transforms.unwrapNodes(editor, {
match: (n: Node) =>
LIST_TYPES.includes(
(!Editor.isEditor(n) amp;amp; SlateElement.isElement(n) amp;amp; n.type) as string
),
split: true,
});