private static Object AsComplex(this JsValue value, Type targetType, EngineInstance engine) { var obj = value.FromJsValue(); var sourceType = obj.GetType(); if (sourceType == targetType || sourceType.GetTypeInfo().IsSubclassOf(targetType) || targetType.GetTypeInfo().IsAssignableFrom(sourceType.GetTypeInfo())) { return(obj); } else if (targetType.GetTypeInfo().IsSubclassOf(typeof(Delegate))) { var f = obj as FunctionInstance; if (f == null && obj is String b) { var e = engine.Jint; var p = new[] { new JsValue(b) }; f = new ClrFunctionInstance(e, (_this, args) => e.Eval.Call(_this, p)); } if (f != null) { return(targetType.ToDelegate(f, engine)); } } var method = sourceType.PrepareConvert(targetType) ?? throw new JavaScriptException("[Internal] Could not find corresponding cast target."); return(method.Invoke(obj, null)); }