- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我希望其中一位 TypeScript 能够参与其中。我是 Definitely Typed 贡献者之一,我一直致力于修复与 Q.d.ts 相关的损坏测试。 .
以下测试在q-tests.ts在 TS 0.9.5 之前工作:
var eventualAdd = Q.promised((a: number, b: number) => a + b);
promised
方法定义如下所示:
export function promised<T>(callback: (...args: any[]) => T): (...args: any[]) => Promise<T>;
但现在我们使用的是 0.9.5,此测试无法编译并因以下错误而失败:
error TS2082: Supplied parameters do not match any signature of call target:
Call signatures of types '(a: number, b: number) => number' and '(...args: any[]) => {}' are incompatible:
Call signature expects 0 or fewer parameters.
error TS2087: Could not select overload for 'call' expression.
我已经尝试调整测试以获得更多洞察力 - 例如通过像这样指定类型:
var eventualAdd = Q.promised<number>((a: number, b: number) => a + b);
但我没有得到更多信息 - 它以类似这样的方式失败:
error TS2082: Supplied parameters do not match any signature of call target:
Call signatures of types '(a: number, b: number) => number' and '(...args: any[]) => number' are incompatible:
Call signature expects 0 or fewer parameters.
error TS2087: Could not select overload for 'call' expression.
任何人都可以提供任何见解吗?我没有发现描述输入方式有任何问题。它看起来是正确的,但它不起作用。我似乎记得在 TS 0.9.5 中,any 现在默认被视为 {}?这会把 ...args: any[]
回调签名从水里吹出来吗?我希望不会!
最佳答案
感谢 IgorBek 在这里回答:https://github.com/borisyankov/DefinitelyTyped/pull/1467
我引用:
“我将参数重写为可选参数。...args: any[]
表示该函数需要 0 个或更多参数。因此即使没有参数它也应该工作。(a: number , b: number) => number
不可转换,因为它需要 2 个参数。所以当你写 (a?: number, b?: number) => number
时,函数需要 0、1 或 2 个参数(或更多,如果我们将剩余参数视为未使用)。”
Ryan Cavanaugh 是正确的,这是重复的。我希望 TypeScript 按照建议进行调整,因此将非可选参数指定为可选参数不再是解决方案。它感觉更像是一种变通方法,而不是合法代码。
关于TypeScript 0.9.5 - ...args : any[] dead in the water?(查看 Q.d.ts),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20728598/
我有这个代码。为了让它工作,我必须使用 Args&&... 而不是 Args... 或 Args&... 我注意到 args 从 & 转换为 const& 或 && 转换为 &。 Args...Arg
当我定义类时,我总是去 Class A(object): def __init__(self, arg): self.arg = arg def print_arg(s
假设我想定义两个 {Type} 类的变量。构造函数采用 1 个参数。下面两种方式是否完全等价(编译成相同的目标代码)? Type a(arg), b(arg); 和 Type a(arg); Type
(旁白:我是一名 Perl 程序员,正如您所知,这是我的第一个重要的 Java 程序。简单的术语将不胜感激。) 我有以下启动器作为编码工作: import java.lang.reflect.*; i
Math.nextUp(arg) 始终与 arg + Math.ulp(arg) 相同,还是我遗漏了什么? System.out.println( 0.5 + Math.ulp(0.5));
今天我在学习完美转发,我创建了这个代码示例 #include #include template auto toStdFun(Function&& fun, Args&&...ar
我想知道你会选择哪个选项? putStrLn (show randomNum) putStrLn $ show randomNum (putStrLn . show) randomNum 所有选项在语
我试图在 visual studio 2012 中编译一个库,它最初是用 c++ 为 visual studio 2015 编写的。我有一个错误说 'class' missing tag。 错误消息的
我在下面的代码中遇到了运行时异常ArrayIndexOutOfBoundException,行中: if ( args[0].equals("t") || args[0].equals("time")
我有以下代码 import React, { Component } from "react"; import { Accounts } from "meteor/accounts-base"; ex
这个问题已经有答案了: Difference between Arrays and 3 dots (Varargs) in java (3 个回答) 已关闭 5 年前。 受学校线性代数 I 和 II
所以我定义了一个函数: def getDistnace(self, strings, parentD, nodeName, nodeDistance): 我用它来调用: Node.getDistnac
这个问题在这里已经有了答案: subprocess.call() arguments ignored when using shell=True w/ list [duplicate] (2 个答案
我想将参数传递给 java 应用程序,但喜欢 linux 应用程序风格。 java 中的main 方法对所有参数使用一个String 数组。在 Linux 中,大多数应用程序接受如下参数:ls -l
这是我的代码片段 #include void change(int a[]){ printf("%p\n",&a); } int main(){
我需要使用 python 3.6 subprocess.run() 函数发出以下命令: gsettings set org.gnome.shell enabled-extensions "['appl
这两个函数是否有任何有意义的不同?有什么理由通常更喜欢一个而不是另一个吗? void foo(auto x, auto &... y) { /* ... */ } template void foo(
例如: def m(arg, ...args) { println "arg: $arg" println "args: $args" } m('arg', k:'v') 输出: ar
我对 Java 还很陌生。目前正在尝试将 args[] 中给出的文件名传递给此 FileReader,但当我编译时,它说找不到指定的文件。如果我对文件名进行硬编码,它就可以正常工作。这应该如何运作?
为什么这是一个语法错误??做这件事的合适方法是什么? >>> def f(*args, option=None): File "", line 1 def f(*args, option=
我是一名优秀的程序员,十分优秀!