- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何从 monaco 编辑器中获取转译的 TypeScript 代码?另外,是否可以访问 TypeScript 语言服务?我试过这个:
monaco.languages.typescript.getTypeScriptWorker();
Promise<any>
我不知道该怎么办!
最佳答案
经过大量研究,它出现了 TypeScript LanguageService
接口(interface)通过工作代理对象部分公开。这可能是因为服务在另一个线程中并且消息被推送到它,因此需要使用 promise 。
为了使事情变得更容易,我查看了返回对象上的公开函数并创建了这个定义;希望它可以帮助某人:
namespace ts {
export interface IMonacoTypeScriptServiceProxy {
_getModel(uri: string): Promise<{ _eol: string, _lineStarts: any, _Lines: string[], length: number, _uri: Uri, _versionId: number }>;
findRenameLocations(uri: string, position: number, findInStrings: boolean, findInComments: boolean, providePrefixAndSuffixTextForRename?: boolean): Promise<readonly RenameLocation[] | undefined>;
getCodeFixesAtPosition(uri: string, start: number, end: number, errorCodes: readonly number[], formatOptions: FormatCodeSettings, preferences: UserPreferences): Promise<readonly CodeFixAction[]>;
getCompilationSettings(): Promise<CompilerOptions>;
getCompilerOptionsDiagnostics(): Promise<Diagnostic[]>;
getCompletionEntryDetails(uri: string, position: number, name: string, formatOptions: FormatCodeOptions | FormatCodeSettings | undefined, source: string | undefined, preferences: UserPreferences | undefined): Promise<CompletionEntryDetails | undefined>;
getCompletionsAtPosition(uri: string, position: number, options: GetCompletionsAtPositionOptions | undefined): Promise<WithMetadata<CompletionInfo> | undefined>;
getCurrentDirectory(): Promise<string>;
getDefaultLibFileName(options: CompilerOptions): Promise<string>;
getDefinitionAtPosition(uri: string, position: number): Promise<ReadonlyArray<DefinitionInfo> | undefined>;
getEmitOutput(uri: string, emitOnlyDtsFiles?: boolean): Promise<EmitOutput>;
getFormattingEditsAfterKeystroke(uri: string, position: number, key: string, options: FormatCodeOptions | FormatCodeSettings): Promise<TextChange[]>;
getFormattingEditsForDocument(uri: string, options: FormatCodeOptions | FormatCodeSettings): Promise<TextChange[]>;
getFormattingEditsForRange(uri: string, start: number, end: number, options: FormatCodeOptions | FormatCodeSettings): Promise<TextChange[]>;
getNavigationBarItems(uri: string): Promise<NavigationBarItem[]>;
getOccurrencesAtPosition(uri: string, position: number): Promise<ReadonlyArray<ReferenceEntry> | undefined>;
getQuickInfoAtPosition(uri: string, position: number): Promise<QuickInfo | undefined>;
getReferencesAtPosition(uri: string, position: number): Promise<ReferenceEntry[] | undefined>;
getRenameInfo(uri: string, position: number, options?: RenameInfoOptions): Promise<RenameInfo>;
getScriptFileNames(): Promise<string[]>;
getScriptKind(uri: string): Promise<ScriptKind>;
getScriptSnapshot(uri: string): Promise<IScriptSnapshot | undefined>;
getScriptVersion(uri: string): Promise<string>;
getSemanticDiagnostics(uri: string): Promise<Diagnostic[]>;
getSignatureHelpItems(uri: string, position: number, options: SignatureHelpItemsOptions | undefined): Promise<SignatureHelpItems | undefined>;
getSuggestionDiagnostics(uri: string): Promise<DiagnosticWithLocation[]>;
getSyntacticDiagnostics(uri: string): Promise<DiagnosticWithLocation[]>;
isDefaultLibFileName(uri: string): Promise<boolean>;
}
}
var editor = monaco.editor.create(...etc...);
var tsProxy: ts.IMonacoTypeScriptServiceProxy;
monaco.languages.typescript.getTypeScriptWorker()
.then(function(worker: (v: monaco.Uri) => Promise<ts.IMonacoTypeScriptServiceProxy>) {
worker(editor.getModel().uri)
.then(function(proxy) {
tsProxy = proxy;
});
});
getEmitOutput(uri: string, emitOnlyDtsFiles?: boolean)
.
uri
是文件名,即
monaco.Uri
转换为字符串(摩纳哥术语中的
model
是编辑器中的单个文件),因此:
tsProxy.getEmitOutput(editor.getModel().uri.toString())
.then((r) => { console.log(r.outputFiles[0].text); });
关于typescript - 如何从 monaco 编辑器获取转译代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55132485/
在 ES6 中,我们可以使用 rest 参数,有效地创建一个参数数组。 TypeScript 使用 for 循环将其转换为 ES5。我想知道是否存在使用 for 循环方法比使用 Array.proto
鉴于以下情况: require('babel-core').transform('3').code 有没有办法让它返回3 (一个表达式)而不是 3; (一份声明)? 我试过了: 在网络和各种站点上搜索
这是我的计划。我想使用适用于 Windows 和 Mac 的 Typescript 构建应用程序。但是,由于我要将 Typeascript 代码转换为 Javascript 代码,所以我想尽可能实现一
是否有一个独立的转译器用于将 JSX 转换为 JavaScript(即只是 → createElement("foo", …) ,没有别的)? 我知道我可以只使用 Babel 和 Transform
我知道使用 babel 设置内联 javascript transpile // your es6 code 但是有没有可能将 es6 代码的字符串版本提供给 babel 并获得作为字
我想转译 ES6 中的几个 js 文件以与 chrome 兼容,但似乎 http://babeljs.io/docs/usage/cli/ 中的文档不准确。 完成前几个步骤后,我在控制台中输入:bab
我玩了一下 Babel 和 ES6,转译了一些代码,但我被困在这部分了: class App extends SomeParent { myFunction() { } } 我感兴趣的
我全新安装了 Next.js,并且希望能够使用 import 和 async/await 等。 我已经更新了我的 .babelrc { "plugins": [ [ "modu
我在 index.html 中有这个 SystemJS 配置: System.config({ defau
我正在开发一个网络应用程序,并将我的 Javascript 分成多个文件。我正在使用 Babel 将 ES2015 源文件目录转换为单个 ES5 文件。来自面向对象的背景,我喜欢拥有“类”,无论它们是
我对 Webpack 还很陌生,我只是想在这里启动一个简单的项目。我收到以下错误: ERROR in ./index.js Module parse failed: /Users/jay/Docume
我正在开发一个使用 es6 和 es7 代码的 Aurelia 应用程序,我正在尝试使用 babel 转译代码。我的 packages.json 文件中有以下内容 "scripts": { "
问题 当我使用npm run start运行nodemon时,我收到错误:找不到模块“Test”,以及当我使用npm run build构建文件时 并运行 ./dist/index.js,我得到同样的
由于 babel 没有正确转译代码,所有测试都失败了。 下面是来自控制台的错误。 Jest encountered an unexpected token This usually means t
我知道这样的事情不应该难倒我,但它确实难倒了我。 我正在学习如何使用 coffeescript 以及如何使用 Adobe Brackets 作为我的文本编辑器。那么如何在 Adobe Brac
TypeScript 在转译过程中检查整个代码库,即使实际上只有一个文件发生了变化。对于小型项目,这很好,但随着我们的代码库增长,这需要相当长的时间。 在开发过程中,我希望我的单元测试能够快速响应。单
我是第一次建立 TS 项目。我很好奇 - 我可以使用和配置 Babel 或者只是做 tsc .. 进行转译。 两者的主要区别是什么? 最佳答案 主要区别在于对 TypeScript 语言本身的支持。
对于我拥有的每个手动模拟,我都会收到来自 Jest 的警告,因为它同时找到了它的 .ts 和 .js 版本,并要求我删除一个,即: jest-haste-map: duplicate manual m
我是 babel 的新手,正在尝试转换我的 es6 代码以与 IE11 一起使用。但是当我在 IE11 中运行代码时,我收到关于我的 forEach 代码的 js 错误。根据我的阅读,我需要添加预设
尝试使用 mocha 对 ReactJS 应用程序进行单元测试,但在 node_modules 中使用的 es6 功能(导入/导出)中出现错误文件夹。有问题的应用程序是使用 babel 进行转译的,但
我是一名优秀的程序员,十分优秀!