editor.IStandaloneCodeEditor' 不可分配给 'monaco.editor.IStandaloneCodeEditor' 类型的参数
editor.IStandaloneCodeEditor' is not assignable to parameter of type 'monaco.editor.IStandaloneCodeEditor'
为了在下面的源代码中使用 monaco,我确实安装了下面的包,但出现了类型错误。为什么会这样,我该如何解决?
包:
npm i monaco-editor
我正在使用这个命令:
yarn install
包文件如下所示:
{
"private": true,
"name": "node-example",
"version": "0.13.0",
"dependencies": {
"@codingame/monaco-jsonrpc": "^0.3.1",
"express": "^4.15.2",
"file-loader": "^4.3.0",
"monaco-editor": "^0.27.0",
"monaco-editor-core": "^0.22.3",
"monaco-editor-webpack-plugin": "^4.1.2",
"monaco-languageclient": "^0.13.0",
"normalize-url": "^2.0.1",
"reconnecting-websocket": "^3.2.2",
"request-light": "^0.2.2",
"vscode-json-languageservice": "^4.0.2",
"vscode-languageserver": "7.0.0",
"vscode-uri": "^3.0.2",
"vscode-ws-jsonrpc": "^0.2.0",
"ws": "^5.0.0"
},
"scripts": {
"prepare": "yarn run clean && yarn run build",
"compile": "tsc",
"watch": "tsc -w",
"clean": "rimraf lib",
"copy": "cp src/index.html lib/index.html",
"build": "yarn run compile && webpack && yarn run copy",
"start": "node lib/server.js",
"start:ext": "node lib/server.js --external"
},
"devDependencies": {
"webpack-cli": "^4.8.0"
}
}
这是我遇到的错误:
src/client.ts:32:24 - error TS2345: Argument of type
'import("path/to/project/monaco-languageclient/example/node_modules/monaco-editor/esm/vs/editor/editor.api").editor.IStandaloneCodeEditor'
is not assignable to parameter of type
'monaco.editor.IStandaloneCodeEditor'.
这是完整的源代码:
import { listen, MessageConnection } from 'vscode-ws-jsonrpc';
import {
MonacoLanguageClient, CloseAction, ErrorAction,
MonacoServices, createConnection
} from 'monaco-languageclient';
import * as monaco from 'monaco-editor'
import normalizeUrl = require('normalize-url');
const ReconnectingWebSocket = require('reconnecting-websocket');
// register Monaco languages
monaco.languages.register({
id: 'typescript',
extensions: ['.ts'],
aliases: ['TypeScript','ts','TS','Typescript','typescript']
})
// create Monaco editor
const value = `{
"$schema": "http://json.schemastore.org/coffeelint",
"line_endings": "unix"
}`;
const editor = monaco.editor.create(document.getElementById("container")!, {
model: monaco.editor.createModel(value, 'typescript', monaco.Uri.parse('file:///abs/path/to/demo/ts/file.ts')),
glyphMargin: true,
theme: "vs-dark",
lightbulb: {
enabled: true
}
});
// install Monaco language client services
MonacoServices.install(editor,{rootUri: "file:///abs/path/to/demo/ts"});
// create the web socket
const url = createUrl('ws://localhost:3000/ts')
const webSocket = createWebSocket(url);
// listen when the web socket is opened
listen({
webSocket,
onConnection: connection => {
// create and start the language client
const languageClient = createLanguageClient(connection);
const disposable = languageClient.start();
connection.onClose(() => disposable.dispose());
}
});
function createLanguageClient(connection: MessageConnection): MonacoLanguageClient {
return new MonacoLanguageClient({
name: "Sample Language Client",
clientOptions: {
// use a language id as a document selector
documentSelector: ['typescript'],
// disable the default error handler
errorHandler: {
error: () => ErrorAction.Continue,
closed: () => CloseAction.DoNotRestart
}
},
// create a language client connection from the JSON RPC connection on demand
connectionProvider: {
get: (errorHandler, closeHandler) => {
return Promise.resolve(createConnection(connection, errorHandler, closeHandler))
}
}
});
}
function createUrl(path: string): string {
return normalizeUrl(path);
}
function createWebSocket(url: string): WebSocket {
const socketOptions = {
maxReconnectionDelay: 10000,
minReconnectionDelay: 1000,
reconnectionDelayGrowFactor: 1.3,
connectionTimeout: 10000,
maxRetries: Infinity,
debug: false
};
return new ReconnectingWebSocket(url, [], socketOptions);
}
问题似乎是 monaco-editor
提供的 monaco
命名空间与 monaco-editor-core
提供的同名命名空间之间存在冲突。当两者都作为依赖项安装时,TypeScript 似乎假定 monaco.editor.IStandaloneCodeEditor
指的是后者,这会导致问题,因为创建的 monaco.editor
是从前者导入的。
要解决此问题,将 monaco-editor-core
作为依赖项移除可修复混淆并为 monaco.editor.IStandaloneCodeEditor
使用正确的类型。
为了在下面的源代码中使用 monaco,我确实安装了下面的包,但出现了类型错误。为什么会这样,我该如何解决?
包:
npm i monaco-editor
我正在使用这个命令:
yarn install
包文件如下所示:
{
"private": true,
"name": "node-example",
"version": "0.13.0",
"dependencies": {
"@codingame/monaco-jsonrpc": "^0.3.1",
"express": "^4.15.2",
"file-loader": "^4.3.0",
"monaco-editor": "^0.27.0",
"monaco-editor-core": "^0.22.3",
"monaco-editor-webpack-plugin": "^4.1.2",
"monaco-languageclient": "^0.13.0",
"normalize-url": "^2.0.1",
"reconnecting-websocket": "^3.2.2",
"request-light": "^0.2.2",
"vscode-json-languageservice": "^4.0.2",
"vscode-languageserver": "7.0.0",
"vscode-uri": "^3.0.2",
"vscode-ws-jsonrpc": "^0.2.0",
"ws": "^5.0.0"
},
"scripts": {
"prepare": "yarn run clean && yarn run build",
"compile": "tsc",
"watch": "tsc -w",
"clean": "rimraf lib",
"copy": "cp src/index.html lib/index.html",
"build": "yarn run compile && webpack && yarn run copy",
"start": "node lib/server.js",
"start:ext": "node lib/server.js --external"
},
"devDependencies": {
"webpack-cli": "^4.8.0"
}
}
这是我遇到的错误:
src/client.ts:32:24 - error TS2345: Argument of type 'import("path/to/project/monaco-languageclient/example/node_modules/monaco-editor/esm/vs/editor/editor.api").editor.IStandaloneCodeEditor' is not assignable to parameter of type 'monaco.editor.IStandaloneCodeEditor'.
这是完整的源代码:
import { listen, MessageConnection } from 'vscode-ws-jsonrpc';
import {
MonacoLanguageClient, CloseAction, ErrorAction,
MonacoServices, createConnection
} from 'monaco-languageclient';
import * as monaco from 'monaco-editor'
import normalizeUrl = require('normalize-url');
const ReconnectingWebSocket = require('reconnecting-websocket');
// register Monaco languages
monaco.languages.register({
id: 'typescript',
extensions: ['.ts'],
aliases: ['TypeScript','ts','TS','Typescript','typescript']
})
// create Monaco editor
const value = `{
"$schema": "http://json.schemastore.org/coffeelint",
"line_endings": "unix"
}`;
const editor = monaco.editor.create(document.getElementById("container")!, {
model: monaco.editor.createModel(value, 'typescript', monaco.Uri.parse('file:///abs/path/to/demo/ts/file.ts')),
glyphMargin: true,
theme: "vs-dark",
lightbulb: {
enabled: true
}
});
// install Monaco language client services
MonacoServices.install(editor,{rootUri: "file:///abs/path/to/demo/ts"});
// create the web socket
const url = createUrl('ws://localhost:3000/ts')
const webSocket = createWebSocket(url);
// listen when the web socket is opened
listen({
webSocket,
onConnection: connection => {
// create and start the language client
const languageClient = createLanguageClient(connection);
const disposable = languageClient.start();
connection.onClose(() => disposable.dispose());
}
});
function createLanguageClient(connection: MessageConnection): MonacoLanguageClient {
return new MonacoLanguageClient({
name: "Sample Language Client",
clientOptions: {
// use a language id as a document selector
documentSelector: ['typescript'],
// disable the default error handler
errorHandler: {
error: () => ErrorAction.Continue,
closed: () => CloseAction.DoNotRestart
}
},
// create a language client connection from the JSON RPC connection on demand
connectionProvider: {
get: (errorHandler, closeHandler) => {
return Promise.resolve(createConnection(connection, errorHandler, closeHandler))
}
}
});
}
function createUrl(path: string): string {
return normalizeUrl(path);
}
function createWebSocket(url: string): WebSocket {
const socketOptions = {
maxReconnectionDelay: 10000,
minReconnectionDelay: 1000,
reconnectionDelayGrowFactor: 1.3,
connectionTimeout: 10000,
maxRetries: Infinity,
debug: false
};
return new ReconnectingWebSocket(url, [], socketOptions);
}
问题似乎是 monaco-editor
提供的 monaco
命名空间与 monaco-editor-core
提供的同名命名空间之间存在冲突。当两者都作为依赖项安装时,TypeScript 似乎假定 monaco.editor.IStandaloneCodeEditor
指的是后者,这会导致问题,因为创建的 monaco.editor
是从前者导入的。
要解决此问题,将 monaco-editor-core
作为依赖项移除可修复混淆并为 monaco.editor.IStandaloneCodeEditor
使用正确的类型。