typescript - 如何在智能感知的 Monaco Editor 中定义全局变量?

标签 typescript monaco-editor

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

我想让 typescript 变量在此代码段中全局可用,并为其提供智能感知。

我正在使用这段代码加载 typescript 类型:

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

但显然没有任何额外的想法是行不通的。因为 typescript 类型创建为模块,并且不会向全局公开任何内容。

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

monaco.languages.typescript.javascriptDefaults.addExtraLib(`
  declare const typescript: any;
`, 'global.d.ts');

但是我不能为这个变量分配 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');
 });

但运气不好。它不起作用。

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

最佳答案

我不熟悉 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');

或者,直接对 TypeScript 类型进行猴子修补:

monaco.languages.typescript.javascriptDefaults.addExtraLib(
  typings + "\nexport as namespace typescript;", path);

关于typescript - 如何在智能感知的 Monaco Editor 中定义全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51538242/

相关文章:

javascript - Visual Studio 在 TypeScript 中显示错误的 `this` 值

typescript - mui TextField 标签宽度问题,当我进行字体覆盖时

angular - 完成for循环后如何完成订阅者?

reactjs - 如何使用 Webpack 在摩纳哥加载 npm 模块类型定义并使用react create-react-app

javascript - 在 GAS Web 编辑器中输入符号

javascript - 在 typescript 中访问主类中的方法

asp.net-web-api - 为 ASP.NET Core Controller 自动生成 TypeScript 客户端代码

javascript - 如何禁用摩纳哥上下文菜单?

javascript - 如何在 Monaco 编辑器中获得 JQuery 代码完成?