我在项目中使用monaco编辑器来帮助用户指定一些模板 .

require.config({ paths: { 'vs': 'https://unpkg.com/monaco-editor@0.10.1/min/vs' }});

window.MonacoEnvironment = { getWorkerUrl: () => proxy };

let proxy = URL.createObjectURL(new Blob([`
	self.MonacoEnvironment = {
		baseUrl: 'https://unpkg.com/monaco-editor@0.10.1/min/'
	};
	importScripts('https://unpkg.com/monaco-editor@0.10.1/min/vs/base/worker/workerMain.js');
`], { type: 'text/javascript' }));

require(["vs/editor/editor.main"], function () {
	let editor = monaco.editor.create(document.getElementById('container'), {
		value: '',
		language: 'javascript',
	});
	
  monaco.languages.typescript.javascriptDefaults
      .addExtraLib(`var myobject = {
                      field1: "",
                      field2: ""
                    }`, 'filename/fields.d.ts')
});
html, body, #container {
	width: 100%;
	height: 100%;
}
<script src="https://unpkg.com/monaco-editor@0.10.0/min/vs/loader.js"></script>
<div id="container"></div>

例如

{{ myobject.field1 }}

当他们输入时,我希望智能感知他们可以进入的内容,并且能够理想地将其指定为json对象 .

例如,我像这样描述myobject

myobject = { field1: '', field2: '' }

并且当他们为myobject键入get first intellisense时

enter image description here

然后当它们向下移动时,它们也会在田地中得到它(如果树更深,则也是如此)

enter image description here

上面的示例显示了如何通过在monaco.languages.typescript.javascriptDefaults上添加addExtraLib函数来实现它 . 如果将摩纳哥设置为语言“javascript”,这种方法很有效 .

但是,如果我将语言更改为“handlebars”,则没有longers提供intellisense(预期),并且monaco.languages.html.handlebarsDefaults上没有addExtraLib .

将intellisense指定为一组json(或类似)的最佳方法是什么?

注意:我知道你可以注册一个完成项目提供者 - 但我只能提供单个项目 - 而不是复杂的对象树(不是这个折扣这个方法 - 我也有兴趣如何做复杂的嵌套完成) .