微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 为摩纳哥编辑提供类型提示

我正在尝试使用Monaco编辑器将智能感知/代码完成提供到javascript编辑器中.代码需要是有效的javascript,而不是打字稿.

鉴于一些用户输入的脚本如下:

function onMyEvent(event)
{
    event.someProperty
}

我想在event参数上提供代码完成,这是一个我有t.ds的typescript类,并且可以在运行时推断.

理想情况下,我只想告诉摩纳哥事件的类型是SomeEventClass,让它做其余的事情.
即使这意味着向脚本添加类型提示.但我看不出怎么做.
我尝试在用户脚本中使用JSDoc语法和各种组合,但它看起来像阻止FTB看到:
https://github.com/Microsoft/monaco-editor/issues/203

Adding JavaScript type hints for VSCode/Monaco Intellisence

我也试过注入动态d.ts,按照
https://microsoft.github.io/monaco-editor/playground.html#extending-language-services-configure-javascript-defaults

但声明该功能似乎对编辑没有任何意义.声明一个新类肯定有效,我只是无法弄清楚如何告诉摩纳哥该函数中的事件是一个特定的类型.

我可以看到registerCompletionItemProvider API,但是它没有给出任何声明项目声明等的上下文,也不允许我自动使用我想要的d.ts文件.

解决方法:

从Monaco版本0.90开始,由于修复了https://github.com/Microsoft/monaco-editor/issues/203,如果在编辑代码中使用JSDoc,则可以部分添加.

对于摩纳哥playgound左侧的代码

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

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

// extra libraries
monaco.languages.typescript.javascriptDefaults.addExtraLib([
    'declare class SomeEventType {',
    '    /**',
    '     * Heres the doco for someProperty',
    '     */',
    '    someProperty: string',
    '}',
].join('\n'), 'filename/facts.d.ts');

var jsCode = [
    '"use strict";',
    '',
    "/**",
    " * @param {SomeEventType} event",
    " */",
    "function onMyEvent(event) {",
    "",
    "}"
].join('\n');

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

意味着编辑器现在可以将事件参数解释为SomeEventType:

editor screenshot showing code complete

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐