我傾聽window.matchMedia變化
我有這個錯誤: Parameter 'event' implicitly has an 'any' type.
我應該在此處為event物件指定什么 TS 型別?
const mobileMediaQuery = window.matchMedia("(max-width: 699px)");
mobileMediaQuery?.addEventListener("change", processViewSizeChange);
function processViewSizeChange(event) {
console.log('media query changed! →', event.matches);
}
在互聯網上哪里可以查找 typescript 全域型別?以防我將來需要找到類似的東西。
uj5u.com熱心網友回復:
你可以使用 TypeScript 來了解你需要的型別。這是您的示例。你知道你需要提供"change"事件型別,并且你需要為監聽器提供一個回呼函式,但是你不確定如何鍵入回呼函式,所以一開始就省略它:
const mobileMediaQuery = window.matchMedia('(max-width: 699px)');
mobileMediaQuery.addEventListener('change', ); /*
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Expected 2-3 arguments, but got 1.(2554) */
如果您不包含第二個引數mobileMediaQuery.addEventListener,您將獲得類似的編譯器錯誤診斷。
但是,如果您使用的 IDE 包含 TypeScript Language Server 和 IntelliSense 之類的東西(例如VS Code或TypeScript Playground),您可以將滑鼠懸停在該addEventListener方法上以查看其簽名:
(method) MediaQueryList.addEventListener<"change">(type: "change", listener: (this: MediaQueryList, ev: MediaQueryListEvent) => any, options?: boolean | AddEventListenerOptions | undefined): void ( 1 overload)
從簽名中可以看出,listener是第二個引數,監聽器中事件引數的型別是MediaQueryListEvent。因此,您可以像這樣鍵入您的偵聽器函式:
function processViewSizeChange(event: MediaQueryListEvent): void {
console.log('media query changed! →', event.matches);
}
TS Playground 的最終代碼
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/407983.html
標籤:
上一篇:回傳缺少對應型別的0個值
