如何将`typeof this`设为实例方法参数的类型?以定义Comparable接口为例
实现自动匹配
this类型的Comparable接口 嘿,这个问题问得好!在TypeScript里,确实有更简洁的方式让实例方法的参数自动匹配this的类型,不用每次手动指定泛型参数~
你之前的写法虽然可行,但每次实现Comparable接口时都要重复写Comparable<Thingy>,有点冗余。其实我们可以利用TypeScript的**this类型**来优化这个接口定义:
interface Comparable { equals(operand: this): boolean; }
这样一来,当你在类里实现这个接口时,equals方法的参数会自动匹配当前类的实例类型,不用再显式指定泛型:
class Thingy implements Comparable { id: number; constructor(id: number) { this.id = id; } equals(operand: Thingy): boolean { return this.id === operand.id; } }
更棒的是,这种写法还能自动适配子类场景。比如你定义一个SubThingy继承Thingy,equals方法的参数会自动变成SubThingy类型,完美支持子类的扩展:
class SubThingy extends Thingy { extraProp: string; constructor(id: number, extraProp: string) { super(id); this.extraProp = extraProp; } equals(operand: SubThingy): boolean { return super.equals(operand) && this.extraProp === operand.extraProp; } }
对比原来的泛型写法
你最初的泛型写法Comparable<T>当然也能用,不过this类型更适合这种「只能和自身类实例比较」的场景,它能减少重复代码,还能避免手动指定泛型时可能出现的错误(比如不小心写成Comparable<OtherClass>)。
如果你的需求是允许和其他类型比较,那泛型写法会更灵活;但如果就是要严格匹配当前实例的类型,this类型绝对是更优的选择!
内容的提问来源于stack exchange,提问作者Parzh
相关产品推荐
相关产品推荐

