gpt4 book ai didi

javascript - 向 Monaco Editor 提供类型提示

转载 作者:搜寻专家 更新时间:2023-10-30 21:03:41 26 4
gpt4 key购买 nike

我正在尝试使用 Monaco 编辑器为 javascript 编辑器提供智能感知/代码完成。代码必须是有效的 javascript,而不是 typescript 。

给定一些用户输入这样的脚本:

function onMyEvent(event)
{
event.someProperty
}

我想在事件参数上提供代码补全,这是一个我有 t.ds 的 typescript 类,可以在运行时推断。

理想情况下,我只想告诉 Monaco event 的类型是 SomeEventClass,然后让它完成剩下的工作。即使这意味着向脚本添加类型提示。但我不知道该怎么做。我尝试在用户脚本中使用 JSDoc 语法和各种组合,但它看起来像被阻止的 FTB 看到: https://github.com/Microsoft/monaco-editor/issues/203Adding JavaScript type hints for VSCode/Monaco Intellisence

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

但是声明函数对小编来说似乎没有任何意义。声明一个新类肯定有效,我只是不知道如何告诉 Monaco 该函数中的 event 是特定类型。

我可以看到 registerCompletionItemProvider API,但它不会为您提供项目声明位置等的任何上下文,也不会让我自动使用我想要的 d.ts 文件。

最佳答案

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

对于摩纳哥 Playground 左侧的这段代码:

    // 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

关于javascript - 向 Monaco Editor 提供类型提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43037243/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com