两个小问题

来源:8-21 【TS 泛型接口应用】 融合 Vue3 源码 深入泛型接口 【Vue3源码应用】

乔刻力

2021-10-26

问题一:

	for (let i=0 ; i<myVechileArray.size();i++){
		myvechileArray.get(i).chiculateRent()// 请问这里的chiculateRent能否用 extends keyof来从外部传入呢? keyof应该能找到chiculateRent这个属性,但是怎么获得值,我就不知道了,还有能否对他进行传参
	}

问题二:

	//老师你的这种写法,如果数组比较大的情况下,for循环每循环一次 都会去使用一次.size()方法,感觉不是很好
	for (let i=0 ; i<myVechileArray.size();i++){
		...
	}
	// 建议:
	let myVechileArraySize=myVechileArray.size();
	for (let i=0 ; i<myVechileArraySize;i++){
		...
	}
写回答

1回答

keviny79

2021-10-27

第一个问题答案: 需要用到第9章的某些知识点,所以老师先不做详细解释,你可以先了解下

// 1. 准备一个类

class Student {

  constructor(stuname: string) {

    this.stuname = stuname

  }

  static count: string

  stuname!: string

  study() {

    console.log("学生:", this.stuname)

  }

  eat() {

    console.log(this.stuname + "吃饭");

  }

}


// 2.获取方法名的联合类型

type MethodName<T> = {

  [F in keyof T]: T[F] extends Function ? F : never

}[keyof T]


// 3. 执行方法

function execute<T, CurMethodName extends MethodName<T>>

  (methodName: CurMethodName, arr: T[]) {

  arr.forEach(item => {

    (item as any)[methodName]()

  })

}

let students: Array<Student> = []

students.push(new Student("wangwu"))

students.push(new Student("lisi"))

execute("study", students)


//   第二个问题: 这里你说的正确,数组大时需要提出来, 我讲解这几节时,没有去关注这个问题。

0
1
乔刻力
感谢老师,这样第一个问题看上去更完美了
2021-10-27
共1条回复

晋级TypeScript高手,成为抢手的前端开发人才

轻松驾驭 TypeScript 高级用法, 突破前端成长瓶颈

871 学习 · 425 问题

查看课程