我有一个用例,其中有一个允许用户编写自定义函数的monaco编辑器。此功能必须采用格式
function (source, callback) {
callback(source);
}
因为我们然后将输出分配给一个变量,用于运行数据。
但是,我收到“期望的标识符”错误。有没有办法禁用此单一语法规则?
答案 0 :(得分:1)
但这不是Monaco编辑器语法规则!
这是JavaScript错误!您会收到此错误,因为如果您这样编写它:
function (source, callback)
{
callback(source);
}
那么您将无法使用此功能!
您必须这样写它:
function funcName(source, callback)
{
callback(source);
}
仅,如果您将此函数用作此处的参数:
anotherFunction(function(source, callback)
{
callback(source);
});
您可以写没有名字的东西。或者,如果您立即使用它,如下所示:
(function(source, callback)
{
callback(source);
})('Hello, world!', alert);
答案 1 :(得分:0)
在相同的情况下,我想允许在全局级别使用return语句,因为我的脚本是一个“函数”。 Typescript使用“'return'语句只能在函数体内使用”来将返回标记为错误。
我发现的一个解决方案是过滤模型标记。由于字符串匹配,这真是太糟糕了,但是它可以工作。装饰出现后,UI中会出现轻微闪烁,然后立即消失。
创建编辑器后,订阅装饰更改:
this.editor.onDidChangeModelDecorations( e => this.onDidChangeModelDecorations(e) )
在何处获取当前标记,对其进行过滤,然后将其放回编辑器中:
onDidChangeModelDecorations(e: monaco.editor.IModelDecorationsChangedEvent)
{
let model = this.editor.getModel()
let markers = monaco.editor.getModelMarkers( { owner:'typescript', resource: model.uri} )
// We have to filter out the error that the editor gives on global returns.
// Unfortunately the error code is null in the marker, so we have option but to
// match on the text of the error.
// It will be obvious if this regresses.
let filtered = markers.filter( marker => marker.message != "A 'return' statement can only be used within a function body." )
if (filtered.length != markers.length)
{
monaco.editor.setModelMarkers(model, 'typescript', filtered)
}
}
希望我们将来至少可以得到匹配的错误代码。 标记中可能包含更多信息,您可以更好地对其进行过滤,看看调试器中的标记对象。
答案 2 :(得分:0)
同时,引入了适当的API以忽略某些错误。这应该可以解决上述错误肯定的问题:
monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions({
diagnosticCodesToIgnore: [1003]
});