有两个类,互为调用关系
class One {
private classTwo: Two
constructor() {
this.classTwo = new Two()
}
public dispatch(type: 'one' | 'two' | 'three', data: string | number) {
if (type === 'one' && typeof data === 'string') {
this.classTwo.functionOne(data)
}
else if (type === 'two' && typeof data === 'number') {
this.classTwo.functionTwo(data)
}
else if (type === 'three' && typeof data === 'number') {
this.classTwo.functionThree(data)
}
}
}
class Two {
constructor() {
}
public functionOne(data: string) {
console.log('函数一调用', typeof data)
}
public functionTwo(data: number) {
console.log('函数二调用', typeof data)
}
public functionThree(data: number) {
console.log('函数三调用', typeof data)
}
}
// 调用
const classOne = new One()
classOne.dispatch('one', "1") // string
classOne.dispatch('two', 1) // number
求问ts有没有什么比较好的优化方式,一大串的ifelse看着太碍眼了,或者可以在调用的时候能够判断类型,比如第一个参数是 'one',第二个参数的类型必须是string
补充:classTwo必须要有三个不同名的函数,所以大概不能用重载了
TypeScript 类型的逻辑关系仅限于编译期,运行期还是需要使用判断。
如果不想用那么多 IF,不妨考虑策略模式。
注意,有两个问题没处理(因为懒)
#fnMap
的值应该是元组,第一个元素应该来自于 class Two#fnMap
的初始化应该从实例中搬出来,作为静态初始化(静态函数,或者模块级)