如何使用 Javascript 删除 Monaco 编辑器的自动完成功能?

Dou*_*oug 6 monaco-editor

我正在我的应用程序中嵌入 Monaco 编辑器,我有一些 javascript 文件不应该显示“Web”环境的补全(例如 Node.js 或类似环境)我希望仅针对定义的函数和类显示补全在页面上。

如何从 javascript 模式中删除所有“Web”自动完成?

在此输入图像描述

Jos*_*ulf 6

这是一个很好的问题。此 Github 问题涵盖同一主题:https://github.com/Microsoft/monaco-editor/issues/61

据此,禁用内置库是通过将 noLib 传递给 setCompilerOptions 来完成的:

monaco.languages.typescript.javascriptDefaults.setCompilerOptions({ noLib: true, allowNonTsExtensions: true });
Run Code Online (Sandbox Code Playgroud)

您可以使用 addExtraLib 添加其他类型,它挂在 javascriptDefaults 上。Typescript 提供了一些 d.ts 文件,这些文件提供了 ES5 和 ES6 的基础知识,而没有浏览器的麻烦。下载其中一个并找到一种方法将其包含在您的项目中。您需要将其作为字符串传递。

var coreDefsName = 'lib.es5.d.ts';

// Import the text of your chosen def file.  This will depend on your bundler.
var coreDefs = getResourceString('./' + coreDefsName);

// Register the additional library.
monaco.languages.typescript.javascriptDefaults.addExtraLib(
coreDefs,
coreDefsName
);
Run Code Online (Sandbox Code Playgroud)

  • 这有效:`setCompilerOptions({ noLib:true,allowNonTsExtensions:true})` (6认同)
  • 当我设置这个时,它给我“找不到文件:'inmemory://model/1” (4认同)

小智 5

除了 之外,还有另一种方式noLibs。您还可以用来libs定义所需的默认库,而无需删除所有默认库。例如,您可能仍然需要 ES6 库。

monaco.languages.typescript.javascriptDefaults.setCompilerOptions({
  target: monaco.languages.typescript.ScriptTarget.ES2015,
  lib: ["es6"]
});
Run Code Online (Sandbox Code Playgroud)

从 Typescript 文档的 CompilerOptions 部分:

笔记:

如果未指定 --lib ,则会注入默认的库列表。注入的默认库是: 对于 --target ES5:DOM,ES5,ScriptHost 对于 --target ES6:DOM,ES6,DOM.Iterable,ScriptHost

您可能想要做的就是忽略DOM库。

确保您使用typescriptDefaultsfor the typescriptlanguage 和typescript.javascriptDefaultsfor the javascriptlanguage。我认为他们基本上与摩纳哥相当。这让我困惑了一段时间。