我可以看到如何addExtraLib在摩纳哥使用添加环境声明文件.目前尚不清楚如何将此函数与外部声明文件一起使用,以便编辑器中的Typescript代码可以执行以下操作:
import * as External from "external"
External.foo();
Run Code Online (Sandbox Code Playgroud)
在摩纳哥的设置方面,这似乎不起作用:
// compiler options
monaco.languages.typescript.typescriptDefaults.setCompilerOptions({
target: monaco.languages.typescript.ScriptTarget.ES2016,
allowNonTsExtensions: true,
moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs,
module: monaco.languages.typescript.ModuleKind.CommonJS,
noEmit: true,
noLib: true,
typeRoots: ["node_modules/@types"]
});
// extra libraries
monaco.languages.typescript.typescriptDefaults.addExtraLib(
'export declare function foo():string;', 'node_modules/@types/external/index.d.ts');
monaco.languages.typescript.typescriptDefaults.setDiagnosticsOptions({
noSemanticValidation: false,
noSyntaxValidation: false
})
Run Code Online (Sandbox Code Playgroud)
Ale*_*dev 12
Joe 的回答对我不起作用,通过在外部类型定义文件路径前加上前缀来修复 file:///
这是操场的更新示例:
monaco.languages.typescript.typescriptDefaults.addExtraLib(
'export declare function add(a: number, b: number): number',
'file:///node_modules/@types/math/index.d.ts'
);
const model = monaco.editor.createModel(
`import {add} from 'math';\nconst x = add(3, 5);\n`,
'typescript',
monaco.Uri.parse('file:///main.tsx')
);
monaco.editor.create(document.getElementById('container'), {model});
Run Code Online (Sandbox Code Playgroud)
没有必要提供编译器选项和诊断选项。
玩了一下后我找到了解决方案.基本上,必须使用createModel显式文件URL 加载文件.如果你这样做,那么工作的相对文件路径node_module/@types.这是我可以在操场上使用的工作解决方案:
// compiler options
monaco.languages.typescript.typescriptDefaults.setCompilerOptions({
target: monaco.languages.typescript.ScriptTarget.ES2016,
allowNonTsExtensions: true,
moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs,
module: monaco.languages.typescript.ModuleKind.CommonJS,
noEmit: true,
typeRoots: ["node_modules/@types"]
});
// extra libraries
monaco.languages.typescript.typescriptDefaults.addExtraLib(
`export declare function next() : string`,
'node_modules/@types/external/index.d.ts');
monaco.languages.typescript.typescriptDefaults.setDiagnosticsOptions({
noSemanticValidation: false,
noSyntaxValidation: false
})
var jsCode = `import * as x from "external"
const tt : string = x.dnext();`;
monaco.editor.create(document.getElementById("container"), {
model: monaco.editor.createModel(jsCode,"typescript",new monaco.Uri("file:///main.tsx")),
});
Run Code Online (Sandbox Code Playgroud)
截至 2021 年 4 月 ( ),如果没有基于monaco-editor#2295、monaco-editor#1839和/sf/answers/4434475531/monaco-editor@0.23.0的一些额外详细信息,我无法让之前的解决方案正常工作。我的用例需要从多个现有 NPM 包(不仅仅是文件的任意路径)提供类型定义,这可能会影响解决方案。总而言之,我需要:
.d.ts到一个文件中。TypeScript并不容易做到这一点,因此我使用dts-bundle-generator,但也存在其他解决方案。.d.ts使用raw-loader或其他纯文本加载替代方案导入每个包的内容。addExtraLib每个模块的源代码,向源代码中添加显式的内容declare module 'module-name'。完整示例如下:
import * as monaco from 'monaco-editor/esm/vs/editor/editor.api';
import source1 from '!!raw-loader!./types/package-one.d.ts';
import source2 from '!!raw-loader!./types/package-two.d.ts'
monaco.languages.typescript.typescriptDefaults.addExtraLib(
`declare module '@my-project/package-one' { ${source1} }`,
'file:///node_modules/@my-project/package-one/index.d.ts' // irrelevant?
);
monaco.languages.typescript.typescriptDefaults.addExtraLib(
`declare module '@my-project/package-two' { ${source2} }`,
'file:///node_modules/@my-project/package-two/index.d.ts' // irrelevant?
);
monaco.editor.create(document.getElementById('root'), {
value: `
import { Foo } from '@my-project/package-one';
const foo = new Foo();
`,
language: 'typescript',
theme: 'vs-dark'
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3326 次 |
| 最近记录: |