如何在智能感知的摩纳哥编辑器中定义全局变量?
How to define global variable in monaco editor for intellisense?
我已经集成了 monaco 编辑器,可以编写简单的代码片段。
我想让 typescript
变量在此代码段中全局可用,并为其提供智能感知。
我正在使用此代码加载打字稿类型:
const typings = await fetch(path).then(r => r.text());
monaco.languages.typescript.javascriptDefaults.addExtraLib(typings, path);
但显然没有任何额外的想法是行不通的。因为打字稿类型创建为模块,并且不会向全局公开任何内容。
我可以用这样的东西创建一个全局变量:
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 项目时,出现错误:"An import path cannot end with a '.d.ts' extension. Consider importing './typescript' instead."进行更改后,我可以使用 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);
这也适用于纯 js
///---Webpack.cfg.js---
var fs = require('fs');
var MonacoEditorPlugin = require('monaco-editor-webpack-plugin')
...plugins.push(
new MonacoEditorPlugin({
languages: ['typescript', 'javascript', 'css', 'html', 'json', 'less']
/// typescript - Require !
})
)
let MYDTS = [
fs.readFileSync('./globals.d.ts'),
fs.readFileSync('./src/js/RuntimeDeclare.d.ts'),//some modules
'declare function myFunc(modulename:String): String;', //inline
]
.join(';\n')
.replace(/export declare/g, 'declare')
.replace(/export interface/g, 'interface')
.replace(/export type/g, 'type');// 'export'is not recognize, so remove
//import won't work, you need to do it in expanded form
//---In front js---
// validation settings
monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions({
noSemanticValidation: true,
noSyntaxValidation: false
});
// compiler options
monaco.languages.typescript.javascriptDefaults.setCompilerOptions({
target: monaco.languages.typescript.ScriptTarget.ES6,
allowNonTsExtensions: true,
allowJs: true,//!!!Require for js
});
monaco.languages.typescript.javascriptDefaults.addExtraLib(
MYDTS, 'ts:filename/MYDTS.d.ts');
monaco.editor.create(....
我已经集成了 monaco 编辑器,可以编写简单的代码片段。
我想让 typescript
变量在此代码段中全局可用,并为其提供智能感知。
我正在使用此代码加载打字稿类型:
const typings = await fetch(path).then(r => r.text());
monaco.languages.typescript.javascriptDefaults.addExtraLib(typings, path);
但显然没有任何额外的想法是行不通的。因为打字稿类型创建为模块,并且不会向全局公开任何内容。
我可以用这样的东西创建一个全局变量:
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 项目时,出现错误:"An import path cannot end with a '.d.ts' extension. Consider importing './typescript' instead."进行更改后,我可以使用 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);
这也适用于纯 js
///---Webpack.cfg.js---
var fs = require('fs');
var MonacoEditorPlugin = require('monaco-editor-webpack-plugin')
...plugins.push(
new MonacoEditorPlugin({
languages: ['typescript', 'javascript', 'css', 'html', 'json', 'less']
/// typescript - Require !
})
)
let MYDTS = [
fs.readFileSync('./globals.d.ts'),
fs.readFileSync('./src/js/RuntimeDeclare.d.ts'),//some modules
'declare function myFunc(modulename:String): String;', //inline
]
.join(';\n')
.replace(/export declare/g, 'declare')
.replace(/export interface/g, 'interface')
.replace(/export type/g, 'type');// 'export'is not recognize, so remove
//import won't work, you need to do it in expanded form
//---In front js---
// validation settings
monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions({
noSemanticValidation: true,
noSyntaxValidation: false
});
// compiler options
monaco.languages.typescript.javascriptDefaults.setCompilerOptions({
target: monaco.languages.typescript.ScriptTarget.ES6,
allowNonTsExtensions: true,
allowJs: true,//!!!Require for js
});
monaco.languages.typescript.javascriptDefaults.addExtraLib(
MYDTS, 'ts:filename/MYDTS.d.ts');
monaco.editor.create(....