Typescript 我如何从摩纳哥编辑器中获取传输的代码?
如何从monaco编辑器中获取传输的TypeScript代码?另外,是否可以访问TypeScript语言服务?我试过这个:Typescript 我如何从摩纳哥编辑器中获取传输的代码?,typescript,monaco-editor,Typescript,Monaco Editor,如何从monaco编辑器中获取传输的TypeScript代码?另外,是否可以访问TypeScript语言服务?我试过这个: monaco.languages.typescript.getTypeScriptWorker(); 但是它返回了承诺,我不知道该怎么办 经过大量研究,似乎TypeScriptLanguageService接口通过工作代理对象部分公开。这可能是因为服务位于另一个线程中,消息被推送到它,因此需要使用承诺 为了让事情变得更简单,我检查了返回对象上的公开函数,并创建了这个定义;
monaco.languages.typescript.getTypeScriptWorker();
但是它返回了
承诺
,我不知道该怎么办 经过大量研究,似乎TypeScriptLanguageService
接口通过工作代理对象部分公开。这可能是因为服务位于另一个线程中,消息被推送到它,因此需要使用承诺
为了让事情变得更简单,我检查了返回对象上的公开函数,并创建了这个定义;希望它能帮助某人:
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>;
}
}
返回传输的JavaScript以及所有其他文件(如果可用)!不客气。:) 现在,0.20.0版的情况发生了变化。方法
getTypeScriptWorker
和getJavaScriptWorker
立即返回有效类型:
export const getTypeScriptWorker: () => Promise<(...uris: Uri[]) => Promise<TypeScriptWorker>>;
export const getJavaScriptWorker: () => Promise<(...uris: Uri[]) => Promise<TypeScriptWorker>>;
导出常量getTypeScriptWorker:()=>Promise-Promise>;
导出常量getJavaScriptWorker:()=>Promise-Promise>;
promise参数也已更改
通过此更改,不再需要维护自己的工作者(代理)类型。到目前为止,讨论的重点是获取JS/TS工作者代理,但对于如何获取传输代码的原始问题,有一个更简单的解决方案:
从“typescript”导入ts;
this.worker.postMessage({code:ts.transfile(context.code)});
这就是我如何将TS代码从编辑器发送到web工作者以进行独立执行。我更新了方法列表。现在还有两个,太棒了!感谢您花时间将此记录下来。
tsProxy.getEmitOutput(editor.getModel().uri.toString())
.then((r) => { console.log(r.outputFiles[0].text); });
export const getTypeScriptWorker: () => Promise<(...uris: Uri[]) => Promise<TypeScriptWorker>>;
export const getJavaScriptWorker: () => Promise<(...uris: Uri[]) => Promise<TypeScriptWorker>>;