如何对对象属性的静态方法进行强类型检查?

时间:2019-08-16 08:44:48

标签: typescript

我有两个不同的类,它们定义了自己的静态方法。所有方法都具有相同的签名

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
}

methodOnemethodTwo属性引用相反类的方法时,编译器不会抱怨。我的意思是:

let myObj: {
   prop1: string,
   methodOne: methodTypeOne,
   methodTwo: methodTypeTwo
} = {
   prop1: 'something',
   methodOne: MethodClassTwo.methodOne,
   methodTwo: MethodClassOne.methodTwo
}

这是可以预期的,因为methodOnemethodTwo属性未指定预定义类型,而是签名。

我尝试将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}}中定义的静态方法?

我很乐意进一步解释或提供其他代码。

0 个答案:

没有答案