interface NetworkConnection { effectiveType?: string metered?: boolean bandwidth?: number } interface NavigatorWithConnection { connection?: NetworkConnection mozConnection?: NetworkConnection webkitConnection?: NetworkConnection } export const hasGoodNetwork = (): boolean => { const nav = navigator as Navigator & NavigatorWithConnection const connection = nav.connection || nav.mozConnection || nav.webkitConnection if (connection) { if (connection.effectiveType) { const goodNetworks = ['3g', '4g'] return goodNetworks.includes(connection.effectiveType) } return !!(connection.metered && (connection.bandwidth || 0) > 2) } return true }