I use TypeScript a lot and most clients these days want Google Analytics on their websites. Here’s a handy TypeScript class that I often use. It assumes that you have the events setup in Google Tag Manager.
class GoogleAnalyticsService {
    public static trackEvent(category: string, action: string, label: string) {
        if (typeof window !== 'undefined' && typeof dataLayer !== 'undefined' && category) {
            dataLayer.push({
                event: 'GAevent',
                eventCategory: category.toLowerCase(),
                eventAction: action.toLowerCase(),
                eventLabel: label.toLowerCase()
            });
        }
    }
    public static trackImpression(category: string, action: string, label: string) {
        if (typeof window !== 'undefined' && typeof dataLayer !== 'undefined' && category) {
            dataLayer.push({
                event: 'GAimpression',
                eventCategory: category.toLowerCase(),
                eventAction: action.toLowerCase(),
                eventLabel: label.toLowerCase()
            });
        }
    }
    public static trackSocial(socialNetwork: string, socialAction: string, socialTarget: string) {
        if (typeof window !== 'undefined' && typeof dataLayer !== 'undefined' && socialNetwork) {
            dataLayer.push({
                event: 'GAsocialInteraction',
                socialNetwork: socialNetwork.toLowerCase(),
                socialAction: socialAction.toLowerCase(),
                socialTarget: socialTarget.toLowerCase()
            });
        }
    }
}