如何在 Monaco 编辑器中强制 JavaScript 中的函数签名

How to enforce function signatures in JavaScript in the Monaco editor

我正在尝试让 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"
});

我错过了什么?

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

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

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