如何在打字稿中实现数组签名方法

时间:2013-02-09 21:00:51

标签: typescript

尝试将其编译:

interface ListInterface {
    getObject(index: number): Object;
    [index: number]: Object;
}

class List123 implements ListInterface {
    private list: Object[] = [1,2,3];
    getObject(index: number) { return this.list[index] }
    [index: number] { return this.getObject(index) }
}

但是tsc正在排放:

  

出乎意料的' ['在[]方法声明的类定义中。

Typescript Playground Link(针对我遇到的问题取消注释?

1 个答案:

答案 0 :(得分:5)

某些类型的注释用于定义JavaScript行为并且无法实现 - 索引器注释就是这样一个示例。

请参阅related discussion on codeplex

对于问题中提供的代码示例,有一个部分解决方案,因为JavaScript对象自然支持索引符号。因此,人们可以写:

interface ListInterface {
    getObject(index: number): Object;
}

class List123 implements ListInterface {

    getObject(index: number) { 
        return <Object> this[index] 
    }
}

var list  = new List123();
list[1] = "my object";

console.log(list[1]); // "my object"
console.log(list.getObject(1)); // "my object";