我在向名称以@符号开头的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替换了模块名称,那么一切都会按预期进行,并且我会获得智能感知。你知道Monaco是否支持这个场景吗?如果支持,那么正确的方式是什么?显然,更改我的模块名称是不可行的。
您可以在Monaco Playground中尝试此代码片段。
发布于 2017-11-28 19:18:29
我设法找到了一个解决方案,只需要删除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")
)
});https://stackoverflow.com/questions/47515256
复制相似问题