小编nxn*_*nxn的帖子

具有可变参数计数的函数的TypeScript类型签名

我无法定义接受可变数量参数的函数成员的接口.以下面的对象文字为例:

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)

typescript

96
推荐指数
2
解决办法
7万
查看次数

无法解析已从C#重写和重载的F#方法

以下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)

c# f# interop overriding overloading

21
推荐指数
1
解决办法
546
查看次数

TypeScript lambda函数带有可选参数

我在定义接受可选参数的lambda函数时遇到问题.奇怪的是,如果我使用完整的"函数"语法,匿名函数可以工作,但lambda简写/箭头语法会产生如下错误:

  • 当前范围中不存在名称"a"
  • 提供的参数与呼叫目标的任何签名都不匹配
  • 预期')'

例:

(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)

typescript

4
推荐指数
1
解决办法
8179
查看次数

标签 统计

typescript ×2

c# ×1

f# ×1

interop ×1

overloading ×1

overriding ×1