如何在摩纳哥编辑器中为智能感知定义全局变量?

Tim*_*nko 2 typescript monaco-editor

我已经集成了 monaco 编辑器,可以编写简单的代码片段。

我想让typescript这个片段中的变量全局可用,并为其工作智能感知。

我正在使用以下代码加载打字稿类型:

 const typings = await fetch(path).then(r => r.text());
 monaco.languages.typescript.javascriptDefaults.addExtraLib(typings, path);
Run Code Online (Sandbox Code Playgroud)

但显然没有任何额外的认为它不起作用。因为打字稿类型创建为模块,并且不会向全局公开任何内容。

我可以用这样的东西创建一个全局变量:

monaco.languages.typescript.javascriptDefaults.addExtraLib(`
  declare const typescript: any;
`, 'global.d.ts');
Run Code Online (Sandbox Code Playgroud)

但是我不能typescript为这个变量分配类型。我试过这个

 monaco.languages.typescript.javascriptDefaults.addExtraLib(typings, './typescript.d.ts');

 monaco.languages.typescript.javascriptDefaults.addExtraLib(`
   import * as ts from './typescript.d.ts';

   declare global {
     const typescript: typeof ts;
   }
 `, 'global.d.ts');
 });
Run Code Online (Sandbox Code Playgroud)

但没有运气。它不起作用。

如何将模块公开为全局变量?

Mat*_*hen 5

我不熟悉 Monaco 集成,但是当我将代码手动添加到 TypeScript 项目时,出现错误:“导入路径不能以 '.d.ts' 扩展名结尾。考虑导入 './typescript' .” 进行更改后,我就可以使用typescript全局变量了。

但是,这种方法使您只能访问 中的常量和函数typescript,而不能访问typescript.SourceFile. 要做到这一点,请尝试以下操作:

monaco.languages.typescript.javascriptDefaults.addExtraLib(`
  import * as ts from './typescript';
  export = ts;
  export as namespace typescript;
`, 'global.d.ts');
Run Code Online (Sandbox Code Playgroud)

或者,也可以直接对 TypeScript 打字打补丁:

monaco.languages.typescript.javascriptDefaults.addExtraLib(
  typings + "\nexport as namespace typescript;", path);
Run Code Online (Sandbox Code Playgroud)