admin-vben5/packages/@core/shared/toolkit/src/inference.ts

120 lines
3.1 KiB
TypeScript
Raw Normal View History

2024-05-19 21:20:42 +08:00
import { isFunction, isObject, isString } from '@vue/shared';
/**
* undefined
*
* @param {unknown} value
* @returns {boolean} undefinedtruefalse
*/
function isUndefined(value?: unknown): value is undefined {
return value === undefined;
}
/**
*
*
*
* - null
* - undefined
* -
* - 0
* - Map或Set
* -
*
* @param {T} value
* @returns {boolean} truefalse
*/
function isEmpty<T = unknown>(value: T): value is T {
if (value === null || value === undefined) {
return true;
}
if (Array.isArray(value) || isString(value)) {
return value.length === 0;
}
if (value instanceof Map || value instanceof Set) {
return value.size === 0;
}
if (isObject(value)) {
return Object.keys(value).length === 0;
}
return false;
}
/**
* HTTP或HTTPS URL
*
* @param {string} url
* @return {boolean} HTTP或HTTPS URLtruefalse
*/
function isHttpUrl(url?: string): boolean {
if (!url) {
return false;
}
// 使用正则表达式测试URL是否以http:// 或 https:// 开头
const httpRegex = /^https?:\/\/.*$/;
return httpRegex.test(url);
}
/**
* window对象
*
* @param {any} value
* @returns {boolean} window对象truefalse
*/
function isWindow(value: any): value is Window {
return (
typeof window !== 'undefined' && value !== null && value === value.window
);
}
/**
* Mac OS
*
* navigator.userAgent字符串来判断当前运行环境
* userAgent字符串中包含"macintosh""mac os x"Mac OS
*
* @returns {boolean} Mac OStruefalse
*/
function isMacOs(): boolean {
const macRegex = /macintosh|mac os x/i;
return macRegex.test(navigator.userAgent);
}
/**
* Windows OS
*
* navigator.userAgent字符串来判断当前运行环境
* userAgent字符串中包含"windows""win32"Windows OS
*
* @returns {boolean} Windows OStruefalse
*/
function isWindowsOs(): boolean {
const windowsRegex = /windows|win32/i;
return windowsRegex.test(navigator.userAgent);
}
2024-06-23 23:18:55 +08:00
/**
*
* @param value
*/
function isNumber(value: any): value is number {
return typeof value === 'number' && Number.isFinite(value);
}
2024-05-19 21:20:42 +08:00
export {
isEmpty,
isFunction,
isHttpUrl,
isMacOs,
2024-06-23 23:18:55 +08:00
isNumber,
2024-05-19 21:20:42 +08:00
isObject,
isString,
isUndefined,
isWindow,
isWindowsOs,
};