【问题标题】:How to enforce function signatures in JavaScript in the Monaco editor如何在 Monaco 编辑器中的 JavaScript 中强制执行函数签名
【发布时间】:2018-08-04 11:13:04
【问题描述】:

我正在尝试让 monaco-editor (v0.13.1) 检查 JavaScript 中的函数签名。通过使用下面的代码,我至少可以让 IntelliSense 显示预期的签名,但没有显示错误:

// validation settings
monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions({
    noSemanticValidation: false,
    noSyntaxValidation: false,
});

monaco.languages.typescript.typescriptDefaults.setDiagnosticsOptions({
    noSemanticValidation: false,
    noSyntaxValidation: false,
});

// compiler options
monaco.languages.typescript.typescriptDefaults.setCompilerOptions({
    target: monaco.languages.typescript.ScriptTarget.ES6,
    allowNonTsExtensions: true,
    allowJS: true,
});

var jsCode = `
/**
 * @param {string} a
 * @param {number} [b]
 */
function foo(a, b) {

}

foo(1); // here should be an error!
`

monaco.editor.create(document.getElementById("container"), {
    value: jsCode,
    language: "javascript"
});

我错过了什么?

【问题讨论】:

  • 见 stackoverflow.com/questions/31195952/…>。似乎不可能使用动态类型的语言——比如 Javascript。在 C++ 和其他静态类型语言中,这当然是正常的做法。
  • 您的回答与摩纳哥编辑无关。该编辑器在内部由 TypeScript 提供支持,因此可以做到这一点。在 VSCode 中,它适用于 javascript,在打字稿模式下,它适用于浏览器。只是在我使用 javascript 模式时不在浏览器中。
  • @DGriesel,这对于 JS 代码是完全正确的!你不在 TypeScript 模式!请学习 JS 语言。
  • @Bharata:学习一门语言与想要使用现有的编辑器功能有什么关系?如果您没有什么建设性的补充,请不要...由于我在此期间找到了答案,所以我将其发布在下面。
  • @DGriesel,你可以看到:你在 8 月 7 日得到了答案,没有我的评论就不会在这里发布。而且这个答案是不正确的,因为检查不仅会针对 JavaScript 中的函数签名进行 - 这将针对具有 TypeScript 规则的整个 JavaScript 代码进行。这是完全错误的!

标签: monaco-editor


【解决方案1】:

由于其他发帖人似乎没有抓住我的问题的重点,我会自己回答。

使用 monaco-editor 可以对 JavaScript 代码进行类型检查,VSCode 可以做到这一点,而这正是我打算做的。

为此,编辑器模型必须是“typescript”,文件 URI 需要一个“.js”扩展名,并且必须打开“allowJS”和“checkJS”编译器选项: https://github.com/Microsoft/monaco-editor/issues/989#issuecomment-411027528

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 2019-05-14
    • 2020-05-12
    • 1970-01-01
    相关资源
    最近更新 更多