我有两个不同的类,它们定义了自己的静态方法。所有方法都具有相同的签名
class MethodClassOne {
public static methodOne(): Observable<any> => { ... }
public static methodTwo(): Observable<any> => { ... }
}
class MethodClassTwo {
public static methodOne(): Observable<any> => { ... }
public static methodTwo(): Observable<any> => { ... }
}
我定义了一个强类型对象:
let myObj: {
prop1: string,
methodOne: () => Observable<any>,
methodTwo: () => Observable<any>
} = {
prop1: 'something',
methodOne: MethodClassOne.methodOne,
methodTwo: MethodClassTwo.methodTwo
}
当methodOne
和methodTwo
属性引用相反类的方法时,编译器不会抱怨。我的意思是:
let myObj: {
prop1: string,
methodOne: methodTypeOne,
methodTwo: methodTypeTwo
} = {
prop1: 'something',
methodOne: MethodClassTwo.methodOne,
methodTwo: MethodClassOne.methodTwo
}
这是可以预期的,因为methodOne
和methodTwo
属性未指定预定义类型,而是签名。
我尝试将static
对象中的静态方法移动为:
type methodTypeOne = () => Observable<any>;
class MethodClassOne {
static methods: { [key: string]: methodTypeOne } = {
methodOne: () => { ... },
methodTwo: () => { ... }
}
}
type methodTypeTwo = () => Observable<any>;
class MethodClassTwo {
static methods: { [key: string]: methodTypeTwo } = {
methodOne: () => { ... },
methodTwo: () => { ... }
}
}
let myObj: {
prop1: string,
methodOne: methodTypeOne,
methodTwo: methodTypeTwo
} = {
prop1: 'something',
methodOne: MethodClassTwo.methods.methodOne,
methodTwo: MethodClassOne.methods.methodTwo
}
但是编译器仍然没有抱怨。
是否可以阻止类型为methodOne
的{{1}}属性引用类型为methodOneType
的{{1}}中定义的静态方法?
我很乐意进一步解释或提供其他代码。