属性在Typescript中的自引用接口实现中不存在
我还是打字新手,有人能解释一下我哪里做错了吗?这是预期行为还是错误属性在Typescript中的自引用接口实现中不存在,typescript,Typescript,我还是打字新手,有人能解释一下我哪里做错了吗?这是预期行为还是错误 //接口/ValueObject.ts 导出接口ValueObject{ 等于(valueObject:T):布尔值; toString():字符串; } //值/Age.ts 导出类年龄实现ValueObject{ 建造师( 公共只读值:number, ) {} 等于(另一个年龄:年龄):布尔值{ 返回另一个therage.value==此.value; } toString(){ 返回`${this.value}年{thi
//接口/ValueObject.ts
导出接口ValueObject{
等于(valueObject:T):布尔值;
toString():字符串;
}
//值/Age.ts
导出类年龄实现ValueObject{
建造师(
公共只读值:number,
) {}
等于(另一个年龄:年龄):布尔值{
返回另一个therage.value==此.value;
}
toString(){
返回`${this.value}年{this.value==1?''s'}旧`;
}
}
不知何故,我在编译时遇到了以下错误:
属性“value”在类型“Age”上不存在。
但是我确实在构造函数中声明了属性值,我是否做错了什么?当您编写equals(另一个Age:Age):boolean
时,
引入了一个新的类型参数Age
。这意味着参数定义中的Age
不是您正在定义的classAge
,而是您在函数中引入的类型参数
据我所知,您实际上希望接口采用与实现类相同类型的参数。要在Typescript中实现这一点,我们可以使用多态this
export interface ValueObject {
equals(valueObject: this): boolean;
toString(): string;
}
export class Age implements ValueObject {
constructor(
public readonly value: number,
) { }
equals(anotherAge: Age): boolean {
return anotherAge.value === this.value;
}
toString() {
return `${this.value} year{this.value === 1 ? '' : 's'} old`;
}
}
是的,这实际上是我想做的事情,创建一个接口,实现该接口的类应该与它自己进行比较。我认为通用是一种方式,我想简单的
这个就足够了。我想我想得太远了。我只是想确定一下,有没有一种方法可以用generic实现这一点?