输入类,以便每个方法都必须是“ getter”

时间:2019-12-11 01:53:15

标签: typescript

我有兴趣创建一个类,每个方法都必须是一个吸气剂。这可能吗?

有效:

class Example implements AllGetters {
  get alpha () {
  }
  get beta () {
  }
}

无效:

class Example implements AllGetters {
  get alpha () {
  }
  beta () {
  }
}

1 个答案:

答案 0 :(得分:0)

可以使用具有通用类型的Exclude

type AllGetters<T> = {
    [k in keyof T]: Exclude<T[k], Function>
}

class A implements AllGetters<A> {
    // simple properties: OK
    a: string = 'foo';
    b: number = 1;

    // type error: type '() => number' is not assignable to type 'never'.
    c(): number {
        return 2;
    }

    // getter: OK
    get d(): string {
        return 'hi';
    }

    // getter: not OK because it returns a function
    // type error: type 'Function' is not assignable to type 'never'.
    get e(): Function {
        return console.log;
    }
}

注意事项:

  • 简单属性和吸气剂在类型上没有区别;您只说过所有方法必须都是吸气剂,所以对于您的用例来说应该可以。
  • 也不允许使用getter返回函数,因为此方法与方法之间的类型没有区别。

Playground Link