问题描述
在ts中我们可以使用<T>来定义泛型,提供了灵活的类型推断,提高了开发效率
比如:
function TEST<T>(arg1: T, arg2: any) {}
export interface User<T> {
prop1: string
prop2: number
prop3: T
}
目前大部分项目还是vue2+js,那么在js中如何实现这项功能呢?
解决方案
使用@template关键字
/**
* @template T
*/
场景1:函数参数联动
第一个参数为某个map类型中的key,第二个参数为对应key的value
/**
* @template {keyof WindowEventMap} T
* @param {T} name
* @param {(this:Window, ev: WindowEventMap[T]) => void} value
*/
function test(name, value) {
serviceApis[name] = value
}
test('mousedown', (ev) => {})
这样就可以实现,效果如下:
场景2:泛型类型定义
/**
* @template T
* @typedef Temp
* @property {T} prop1
*/
/**
* @type {Temp<string>}
*/
let a = {}