0

我在将名称以符号开头的自定义类型定义添加到Monaco Editor时遇到问题。@这是一个应该说明我要实现的目标的示例:

monaco.languages.typescript.typescriptDefaults.setCompilerOptions({
    target: monaco.languages.typescript.ScriptTarget.ES2016,
    allowNonTsExtensions: true,
    module: monaco.languages.typescript.ModuleKind.CommonJS,
    noEmit: true,
    typeRoots: ["node_modules/@types"]
});

monaco.languages.typescript.typescriptDefaults.addExtraLib(
    "export class Foo { }",
    "node_modules/@types/@my-module/sub/index.d.ts"
);

monaco.editor.create(document.getElementById("container"), {
    model: monaco.editor.createModel(
        `import * as x from "@my-module/sub"`, 
        "typescript",
        new monaco.Uri("main.ts")
    )
});

这不起作用,因为我的自定义模块被调用@my-module/sub。如果在此示例中我将模块名称替换为,my-module/sub那么一切都按预期工作,我得到了 Intellisense。你知道摩纳哥是否支持这种情况,如果支持,那么正确的方法是什么?显然,更改我的模块名称不是一种选择。

您可以在Monaco Playground中尝试此代码段。

4

1 回答 1

6

设法找到解决方案,只需要删除typeRoots编译器选项并使用node_modules前缀代替:

monaco.languages.typescript.typescriptDefaults.setCompilerOptions({
    target: monaco.languages.typescript.ScriptTarget.ES2016,
    allowNonTsExtensions: true,
    module: monaco.languages.typescript.ModuleKind.CommonJS,
    noEmit: true
});

monaco.languages.typescript.typescriptDefaults.addExtraLib(
    "export class Foo { }",
    "node_modules/@my-module/sub/index.d.ts"
);

monaco.editor.create(document.getElementById("container"), {
    model: monaco.editor.createModel(
        `import * as x from "@my-module/sub"`, 
        "typescript",
        new monaco.Uri("main.ts")
    )
});
于 2017-11-28T11:18:29.000 回答