我在尝试使用定义索引器的接口并将其与系统类型编号[]一起使用时遇到了一些困难。接口的原因是我希望能够传递任何具有数字索引器的类型而不是返回数字,就像number []和类型化数组实例一样。
考虑:
interface IIndexedNumeric
{
[index: number]: number;
}
class buffer {
// ...
push(vals: IIndexedNumeric) { ... }
}
// problem usage:
var ary: number[] = [1,2,3];
var foo = new buffer();
foo.push(ary); // error
// Supplied parameters do not match any signature of call target:
// Could not apply type 'IIndexedNumeric' to argument 1, which is of type 'number[]'
这应该发生吗?似乎number []应该在结构上完全实现IIndexedNumeric。如果我只是拙劣的东西,请帮我看看我的错误。如果没有,你能想到一个解决方法吗?
答案 0 :(得分:2)
我不完全确定,但我相信这是一个错误。规范声明数组类型文字等同于具有索引签名的对象类型[index:number]:ElementType,其中ElementType在您的情况下是数字。数组类型具有与Array.prototype。*相对应的附加属性,但这不应影响与索引器的赋值兼容性。如果愿意,请file a bug on CodePlex了解相关信息。
答案 1 :(得分:0)
我认为如果你实际运行它会很好用,但从技术上讲,IIndexedNumeric是一个不同的数字[],即使它们看起来非常相似。您可能必须将ary转换为IIndexedNumeric,以便编译器不要抱怨。