2013-02-09 92 views
1

阵列签名方法试图让这个编译:如何实现打字稿

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(取消注释//对我有问题?)

回答

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";