Typescript 我如何从摩纳哥编辑器中获取传输的代码?

Typescript 我如何从摩纳哥编辑器中获取传输的代码?,typescript,monaco-editor,Typescript,Monaco Editor,如何从monaco编辑器中获取传输的TypeScript代码?另外,是否可以访问TypeScript语言服务?我试过这个: monaco.languages.typescript.getTypeScriptWorker(); 但是它返回了承诺,我不知道该怎么办 经过大量研究,似乎TypeScriptLanguageService接口通过工作代理对象部分公开。这可能是因为服务位于另一个线程中,消息被推送到它,因此需要使用承诺 为了让事情变得更简单,我检查了返回对象上的公开函数,并创建了这个定义;

如何从monaco编辑器中获取传输的TypeScript代码?另外,是否可以访问TypeScript语言服务?我试过这个:

monaco.languages.typescript.getTypeScriptWorker();

但是它返回了
承诺
,我不知道该怎么办

经过大量研究,似乎TypeScript
LanguageService
接口通过工作代理对象部分公开。这可能是因为服务位于另一个线程中,消息被推送到它,因此需要使用承诺

为了让事情变得更简单,我检查了返回对象上的公开函数,并创建了这个定义;希望它能帮助某人:

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>>;