typescript - 键入类,以便每个方法都必须是“getter”
问题描述
我有兴趣创建一个每个方法都必须是 getter 的类。这可能吗?
有效的:
class Example implements AllGetters {
get alpha () {
}
get beta () {
}
}
无效的:
class Example implements AllGetters {
get alpha () {
}
beta () {
}
}
解决方案
可以使用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 在类型上没有区别;您只是说所有方法都必须是 getter,所以这对于您的用例应该没问题。
- 也不允许返回函数的 getter,因为 this 和方法在类型上没有区别。