如何从摩纳哥编辑器中获取已翻译的TypeScript代码?另外,是否可以访问TypeScript语言服务?我尝试过:
import { RouterModule, Route } from '@angular/router';
export interface MyRoute extends Route {
data: {
resourceName: string;
};
}
export declare type MyRoutes = MyRoute[];
export const routes: MyRoutes = [
{
path: '',
children: [
{
path: 'organisations',
component: OrganisationListComponent,
data: {
resourceName: 'ORGANISATION'
}
},
{
path: 'organisations/create',
component: OrganisationCreateComponent,
data: {
resourceName: 'ORGANISATION_LIST'
},...
}
但是它返回monaco.languages.typescript.getTypeScriptWorker();
,我不知道该怎么办!
答案 0 :(得分:2)
现在,版本0.20.0发生了变化。方法getTypeScriptWorker
和getJavaScriptWorker
现在返回有效类型:
export const getTypeScriptWorker: () => Promise<(...uris: Uri[]) => Promise<TypeScriptWorker>>;
export const getJavaScriptWorker: () => Promise<(...uris: Uri[]) => Promise<TypeScriptWorker>>;
promise参数也已更改。
通过此更改,不再需要维护自己的工作者(代理)类型。
答案 1 :(得分:0)
经过大量研究,看来TypeScript语言服务是通过辅助代理对象公开的。这可能是因为该服务位于另一个线程中,并且消息被推送到该线程中,因此需要使用promises。
为了使事情变得容易,我查看了返回对象上公开的函数并创建了此定义;希望它可以帮助某人:
Promise<any>
它的用法如下:
namespace ts {
export interface IMonacoTypeScriptServiceProxy {
_getModel(uri: string): Promise<{ _eol: string, _lineStarts: any, _Lines: string[], length: number, _uri: monaco.Uri, _versionId: number }>;
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>;
getScriptFileNames(): Promise<string[]>;
getScriptKind(uri: string): Promise<ScriptKind>;
getScriptSnapshot(uri: string): Promise<IScriptSnapshot | undefined>;
getScriptVersion(uri: string): Promise<string>;
/** The first time this is called, it will return global diagnostics (no location). */
getSemanticDiagnostics(uri: string): Promise<Diagnostic[]>;
getSignatureHelpItems(uri: string, position: number, options: SignatureHelpItemsOptions | undefined): Promise<SignatureHelpItems | undefined>;
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
还返回已转译的JavaScript,以及所有其他文件(如果有)!别客气。 :)