我无法定义接受可变数量参数的函数成员的接口.以下面的对象文字为例:
var obj = {
func: () => {
for(var i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
}
}
};
Run Code Online (Sandbox Code Playgroud)
我希望能够定义一个界面,例如:
interface IExample {
func: ( ??? ) => void;
}
Run Code Online (Sandbox Code Playgroud)
这样下面的代码可以编译而不会出错:
var test = (o: IExample) {
o.func("a");
o.func("a", "b");
o.func("a", "b", "c");
...
}
Run Code Online (Sandbox Code Playgroud) 以下F#代码声明了基类和后代类.基类有一个带有默认实现的虚拟方法'Test'.后代类重写基类方法,并添加新的重载'Test'方法.此代码编译良好,并且在访问后代'Test'方法时不会出现任何问题.
F#代码:
module OverrideTest
[<AbstractClass>]
type Base() =
abstract member Test : int -> int
default this.Test x = x + 1
type Descendant() =
inherit Base()
override this.Test x = x - 1
member this.Test (x, y) = x - y
Run Code Online (Sandbox Code Playgroud)
但是,尝试从C#调用后代的'Test'覆盖会导致编译错误:
var result = td.Test(3); < - 方法'Test'没有重载需要1个参数
完整的C#代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Client
{
class Program
{
static void Main(string[] args)
{
var td = new OverrideTest.Descendant();
var result = td.Test(3);
Console.WriteLine(result); …Run Code Online (Sandbox Code Playgroud) 我在定义接受可选参数的lambda函数时遇到问题.奇怪的是,如果我使用完整的"函数"语法,匿名函数可以工作,但lambda简写/箭头语法会产生如下错误:
例:
(function (a, b?) => { console.log(a, b); })("a"); // OK
((a, b?) => { console.log(a, b); })("a", "b"); // Errors
((a, b) => { console.log(a, b); })("a", "b"); // OK
Run Code Online (Sandbox Code Playgroud)