我试图像类一样创建自己的Typescript字典,但是在我的代码中使用了一些自定义方法。
我可以像这样创建基本词典:
export interface IDictionary<T> {
[property: string]: T;
};
export class Dictionary<T> implements IDictionary<T> {
[property: string]: T;
constructor() {}
}
这很有效......但...... 如果我尝试在这个类中创建一个方法,比如
export class Dictionary<T> implements IDictionary<T> {
[property: string]: T;
constructor() {}
public getValues(): T[] { // this will give the error
return Object.values(this);
}
}
我收到此错误:
Property 'getValues' of type '() => T[]' is not assignable to string index type 'T'
。
这甚至可能吗? 如果是,我该如何为我的班级创建方法?
答案 0 :(得分:2)
进入TypeScript时遇到了类似的事情。只是向一个类添加一个函数就会破坏事物,实际上并没有调用该函数。
问题&#39;似乎是因为你基本上可以使用一个类作为接口。在您的示例中,您可以毫无问题地执行以下操作。
let myobject: Dictionary<string>;
myobject = {'name': 'John'};
但请注意,当您声明对象属于Dictionary
类型时,它实际上并不是Dictionary
类的实例,而只是一个常规的javascript对象。< / p>
向Dictionary
类添加任何方法都会导致原始错误。
我们的解决方案是要注意何时有一个符合接口的对象,以及何时有一个类的实例。我上面的例子应该是......
let myobject: IDictionary<string>;
myobject = {'name': 'John'};
如果我想说一个方法添加到Dictionary
类并使用它,我需要一个Dictionary
对象
let myobject: IDictionary<string>;
myobject = {'name': 'John'};
let myinstance: Dictionary<string>;
myinstance = new Dictionary(myobject);
myinstance.getValues();
回到原来的问题,当我真的应该使用Dictionary
类型时,我猜你会宣布IDictionary
类型的某些内容吗?
此外,如果有人有关于使用课程作为界面的信息/文档/参考资料,或者我对该主题严重错误,请告诉我们!