【发布时间】:2014-12-09 09:07:34
【问题描述】:
在下面的 TypeScript 代码中,它是一个更完整的类的子集,我有一些函数,例如 map 和 foldr。当我运行以下代码时:
var s = new ArrayList<number>();
s.append(5, 6, 7, 8);
var i : number = s.foldr(max, 0);
我最终得到一个错误,例如“Type '{}” is notassignable to type 'number'。”我想,类型应该是一个数字。我会这样证明:
foldr 的类型签名为: foldr(f : (x : T, y : B) => B, init : B) : B。因为 T 来自 ArrayList,所以它是一个数字。该函数作为 0 传递给 init,这是一个数字,max 是 max(x : T, y : T) : T 设置 B = T 因为 x 是 T(即使它们可能是不同的 T,但它们不在本例)。
但无论如何,我仍然收到此错误。我犯了一个根本性的错误吗?
代码示例如下,也可在gists 和playground 上找到。
class ArrayList<T> {
private _data : Array<T>;
public constructor() {
this._data = new Array<T>();
}
public get length():number { return this._data.length; }
public append(...items : T[]) : void {
this._data = this._data.concat(items);
}
public get(n : number) : T {
return this._data[n];
}
public foldr<B>(f : (x : T, y : B) => B, init : B) : B {
if (this.length == 0) return init;
var result = init;
for (var i = this._data.length - 1; i >= 0; --i) {
result = f(this._data[i], result);
}
return result;
}
}
function max<T>(x : T, y : T) : T {
return x > y ? x : y;
}
var s = new ArrayList<number>();
s.append(5, 6, 7, 8);
// Type '{}" is not assignable to type 'number'.
var i : number = s.foldr(max, 0);
【问题讨论】:
标签: typescript