属性在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
不是您正在定义的class
Age
,而是您在函数中引入的类型参数

据我所知,您实际上希望接口采用与实现类相同类型的参数。要在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实现这一点?