埋点SDK开发 - 2

205 阅读1分钟

说明: types 目录下记录类型说明,其中DefaultOptions为默认类型,Options为用户传入类型(继承自DefaultOptions,requestUrl必填),TrackConfig 为配置(version是否需要从package.json视业务场景)。Tacker类中initDefaults记录默认值,构造函数传入用户配置

types 目录下新增类型

/**
 * @requestUrl: 接口地址
 * @historyTracker history 上报
 * @hashTracker hash上报
 * @domTracker 携带Tracker-key点击事件上报
 * @sdkVersion sdk版本
 * @jsError js和promise报错异常上报
 */
 export interface DefaultOptions {
    uuid: string | undefined,
    requestUrl: string | undefined,
    historyTracker: boolean,
    hashTracher: boolean,
    domTracker: boolean,
    sdkVersion: string | number,
    extra: Record<string, any> | undefined,
    jsError: boolean
}


export interface Options extends Partial<DefaultOptions> {
    requestUrl: string,
}

export enum TrackerConfig {
    version = '1.0.0'
}

code/index.ts

import { DefaultOptions, TrackerConfig, Options } from '../types/index';

export default class Tracker {
    public data: Options;
    
    constructor(options: Options) {
        this.data = Object.assign(this.initDefaults(), options)
    }

    private initDefaults(): DefaultOptions {
        return {
            sdkVersion: TrackerConfig.version,
            historyTracker: false,
            hashTracher: false,
            domTracker: false,
            jsError: false
        } as DefaultOptions
    }
}