gpt4 book ai didi

typescript - Typescript 中的自引用接口(interface)实现中不存在属性

转载 作者:搜寻专家 更新时间:2023-10-30 21:34:16 25 4
gpt4 key购买 nike

我还是 Typescript 的新手,有人可以向我解释一下我哪里做错了吗?这是预期的行为还是错误?

// interfaces/ValueObject.ts

export interface ValueObject {
equals<T extends ValueObject> (valueObject: T): boolean;
toString (): string;
}
// values/Age.ts

export class Age implements ValueObject {
constructor (
public readonly value: number,
) {}

equals<Age> (anotherAge: Age): boolean {
return anotherAge.value === this.value;
}

toString () {
return `${this.value} year{this.value === 1 ? '' : 's'} old`;
}
}

不知何故,我在编译时遇到了以下错误:属性“value”在类型“Age”上不存在。但是我确实在构造函数中声明了属性值,我做错了什么吗?

最佳答案

当你写 equals<Age> (anotherAge: Age): boolean <Age>引入了一个新的类型参数 Age .这意味着 Age在参数定义中不是类 Age您正在定义,而是您在函数中引入的类型参数。

据我所知,您实际上希望接口(interface)采用与实现类相同类型的参数。要在 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`;
}
}

关于typescript - Typescript 中的自引用接口(interface)实现中不存在属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54177375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com