【发布时间】:2021-12-08 16:17:28
【问题描述】:
根据@monaco-editor/react 的文档,我们需要原始的 monaco-editor 作为对等依赖项。我将它安装为开发依赖项,并尝试将node_modules/monaco-editor/monaco.d.ts 添加到我的tsconfig.json 中的include 块中。但是在此之后我仍然无法访问类型声明。我可以让它工作的唯一方法就是像这样导入它。
import * as monaco from 'monaco-editor/esm/vs/editor/editor.api';
但是现在当我尝试为 editor 和 monaco 变量定义类型声明时,它们会抛出错误。有谁知道让这些工作热起来吗?
这是我尝试定义类型时的代码。
import { useState, useRef } from 'react';
import Editor from '@monaco-editor/react';
import styles from '../Code.module.css';
import * as monaco from 'monaco-editor/esm/vs/editor/editor.api';
type Language = {
languageName: string;
languageID: number;
};
type EditorProps = {
language: Language;
onCodeChange: Function;
};
type Monaco = typeof monaco // to use it as a type for the monaco variable in handleEditorDidMount function
const CodeEditor = ({ language, onCodeChange }: EditorProps) => {
console.log('language is ', language);
const [editorValue, setEditorValue] = useState('//some comment');
const editorRef = useRef(null);
const monacoRef = useRef(null);
const handleEditorDidMount = (editor: monaco.editor.IStandaloneCodeEditor, monaco: Monaco) => {
editorRef.current = editor;
monacoRef.current = monaco;
console.log(monaco.languages.getLanguages());
console.log('editor', editor.getModel().getLanguageIdentifier().language);
};
const handleEditorValueChange = (value: string|undefined) => {
//console.log('event is ', event);
setEditorValue(value);
};
const editorOptions: monaco.editor.IStandaloneEditorConstructionOptions = {
fontSize: 15,
minimap: {
enabled: true,
},
};
return (
<div className={styles.editorBlock}>
<div className={styles.editorNav}>
<button>Submit</button>
<button>Change Language</button>
</div>
<Editor
height="90vh"
language={language.languageName}
defaultValue={editorValue}
onMount={handleEditorDidMount}
onChange={handleEditorValueChange}
options={editorOptions}
/>
</div>
);
};
在我的handleEditorDidMount 函数中,参数 monaco 抛出错误,不能使用 import 作为类型
【问题讨论】:
标签: reactjs typescript monaco-editor