在有些场景中,变量的类型可能不完全准确,但无法修改变量类型声明,每次使用时都需要as一下,用多少次就要写多少次,例如以下情况
declare const el: HTMLDivElement;
el.addEventListener('pointerdown', (e) => {
// ev.target: EventTarget | null
(e.target as HTMLDivElement).setPointerCapture(e.pointerId);
(e.target as HTMLDivElement).releasePointerCapture(e.pointerId);
(e.target as HTMLDivElement).setPointerCapture(e.pointerId);
(e.target as HTMLDivElement).releasePointerCapture(e.pointerId);
})
利用TypeScript的函数的类型断言,可以改变变量的类型,如此一来就不需要每次都as一次了
// 修改传入值的类型
function asType<T>(val: any): asserts val is T { }
declare const el: HTMLDivElement;
el.addEventListener('pointerdown', (e) => {
asType<HTMLDivElement>(ev.target);
e.target.setPointerCapture(e.pointerId);
e.target.releasePointerCapture(e.pointerId);
e.target.setPointerCapture(e.pointerId);
e.target.releasePointerCapture(e.pointerId);
})
唯一的问题就是会导致运行时多调用了一次空函数,据说打包器会删除这一段
2022-08-07 已验证,使用Vite打包后,打包后的代码会删除空函数调用,没有运行时负担