type .d.ts
定义了一下browser-tool的类型,需要的同志可以自取
declare module 'browser-tool' {
type UnionToIntersection<U> = (
U extends any ? (k: U) => void : never
) extends (k: infer I) => void ? I : never;
interface BrowserParser {
parse(ua: string): {
browser: string;
browserVersion: string;
engine: string;
isWebview: boolean;
isRobot: boolean;
};
getInfo(): Promise<
ReturnType<BrowserParser['parse']> & {
cookieEnabled: boolean;
userAgent: string;
}
>;
}
interface SystemParser {
parse(ua: string): {
system: string;
systemVersion: string;
platform: string;
architecture: string;
bitness: number;
}
getInfo(): Promise<ReturnType<SystemParser['parse']>>;
}
interface DeviceParser {
parse(ua: string): {
device: string;
}
getInfo(): Promise<ReturnType<DeviceParser['parse']>> & {
devicePixelRatio: number;
deviceMemory: number;
};
}
interface GpuParser {
parse(): Record<string, never>;
getInfo(): Promise<{
gpu: string;
gpuModel: string;
}>;
}
interface NetworkParser {
parse(): Record<string, never>;
getInfo(): Promise<{
network: string;
isOnline: boolean;
ip: string;
}>;
}
interface BatteryParser {
parse(): Record<string, never>;
getInfo(): Promise<{
isCharging: boolean;
battery: string;
}>;
}
interface ScreenParser {
parse(): Record<string, never>;
getInfo(): Promise<{
screenWidth: number;
screenHeight: number;
clientWidth: number;
clientHeight: number;
screenFPS: number;
screenColorDepth: number;
screenPixelDepth: number;
isTouch: boolean;
}>
}
interface LanguageParser {
parse(): Record<string, never>;
getInfo(): Promise<{
language: string;
}>
}
interface TimezoneParser {
parse(): Record<string, never>;
getInfo(): Promise<{
timezone: string;
}>
}
type InfoParserMap = {
browser: BrowserParser;
system: SystemParser;
device: DeviceParser;
gpu: GpuParser;
network: NetworkParser;
battery: BatteryParser;
screen: ScreenParser;
language: LanguageParser;
timezone: TimezoneParser;
}
type FingerprintList = 'webgl' | 'canvas' | 'font' | 'audio' | 'mime';
interface BrowserTool {
parse(ua: string): ReturnType<BrowserParser['parse']> & ReturnType<SystemParser['parse']> & ReturnType<DeviceParser['parse']>;
getInfo(): Promise<UnionToIntersection<{
[K in keyof InfoParserMap]: Awaited<ReturnType<InfoParserMap[K]['getInfo']>>
}[keyof InfoParserMap]>>;
getInfo<T extends (keyof InfoParserMap)[]>(list: [...T]): Promise<UnionToIntersection<{
[K in T[number]]: Awaited<ReturnType<InfoParserMap[K]['getInfo']>>
}[T[number]]>>;
getFingerprint(): Promise<{
value: string;
} &{
[K in FingerprintList]: string;
}>
getFingerprint<T extends FingerprintList>(list: T[]): Promise<{
value: string;
} &{
[K in T]: string;
}>;
isSupport(name: string, value: string): boolean;
}
const browserTool: BrowserTool;
export default browserTool;
}
@mumuy 把TypeScript的类型定义合并到代码里?
这类型定义,能合并到源码里最好,或者发布到NPM的 @types/browser-tool也行
@Shana-AE 考虑发布到@types/browser-tool吗?我问了chatGPT,它给了发布步骤 https://chatgpt.com/share/681b143e-82dc-800d-bd4a-4e60b9e42c74
@Shana-AE 考虑发布到@types/browser-tool吗?我问了chatGPT,它给了发布步骤 https://chatgpt.com/share/681b143e-82dc-800d-bd4a-4e60b9e42c74
@mumuy 交给作者决定吧~
@Shana-AE 考虑发布到@types/browser-tool吗?我问了chatGPT,它给了发布步骤 https://chatgpt.com/share/681b143e-82dc-800d-bd4a-4e60b9e42c74
@mumuy 交给作者决定吧~
作者说过他不使用TypeScript
@Shana-AE 考虑发布到@types/browser-tool吗?我问了chatGPT,它给了发布步骤 https://chatgpt.com/share/681b143e-82dc-800d-bd4a-4e60b9e42c74
@mumuy 交给作者决定吧~
作者说过他不使用TypeScript
那尊重作者,就这样吧,而且发布到@types需要有维护者,直接添加文件自己修改也方方便