类型的结构自动完成

Structural auto-completion of types

我们正在努力将 Monaco 与我们使用 React 构建的基于 Web 的 RAD 产品集成。它有一个 UI 来创建状态(一个简单的 JSON 结构)和事件处理程序编辑器,用户可以在其中编写函数来处理组件事件,如 onClick 等。我们在事件处理程序部分使用 Monaco。典型的事件处理程序如下所示(简化)-

function onClick($state){
     // do something with $state
}

请注意,$state 结构基于用户创建的州的形状。

既然代码托管在摩纳哥,我们想让用户看到 $state 变量的自动完成。在 Monaco Playground 中查看 the closest example 这个用例,我们是否需要围绕 $state 结构创建一个动态 d.ts 才能工作?或者是否有更简单的替代方法,我们将 State 结构注入编辑器 DOM 并让它自动完成?

使用monaco.languages.typescript.typescriptDefaults.addExtraLib

    $.get('../State.d.ts').done(function (data) {
        console.info('done');


        require.config({ paths: { 'vs': '../node_modules/monaco-editor/min/vs' } });

        require(['vs/editor/editor.main'], function () {
            monaco.languages.typescript.typescriptDefaults.addExtraLib(data, 'StateObject');
            editor = monaco.editor.create(document.getElementById('container'), {
                value: ['aso.EnvironmentName = "DEV"'
                ].join('\n'),
                language: 'typescript'
            });
        });
    })

State.d.ts(您也可以提供 JSON):

interface StateObject {
    CapitalCity: string,
    Population: number,
    ZipCodes: string[]
}

您将 git 该对象的智能感知。

将 addExtraLib 视为 using/include/require 语句。