message: refactor(sampleTime): derive from sample and interval
diff: +/** @prettier */
  import { Observable } from '../Observable';
  -import { Operator } from '../Operator';
  import { Subscriber } from '../Subscriber';
  -import { async } from '../scheduler/async';
  -import { MonoTypeOperatorFunction, SchedulerAction, SchedulerLike, TeardownLogic } from '../types';
  +import { asyncScheduler } from '../scheduler/async';
  +import { MonoTypeOperatorFunction, SchedulerAction, SchedulerLike } from '../types';
  import { lift } from '../util/lift';
  +import { sample } from './sample';
  +import { interval } from '../observable/interval';
  /**
  * Emits the most recently emitted value from the source Observable within
  @@ -45,52 +47,8 @@ import { lift } from '../util/lift';
  * @return {Observable<T>} An Observable that emits the results of sampling the
  * values emitted by the source Observable at the specified time interval.
  * @name sampleTime
  + * @deprecated To be removed in v8. Use `sample(interval(period, scheduler?))`, it's the same thing.
  */
  -export function sampleTime<T>(period: number, scheduler: SchedulerLike = async): MonoTypeOperatorFunction<T> {
  - return (source: Observable<T>) => lift(source, new SampleTimeOperator(period, scheduler));
  -}
  -
  -class SampleTimeOperator<T> implements Operator<T, T> {
  - constructor(private period: number,
  - private scheduler: SchedulerLike) {
  - }
  -
  - call(subscriber: Subscriber<T>, source: any): TeardownLogic {
  - return source.subscribe(new SampleTimeSubscriber(subscriber, this.period, this.scheduler));
  - }
  -}
  -
  -/**
  - * We need this JSDoc comment for affecting ESDoc.
  - * @ignore
  - * @extends {Ignored}
  - */
  -class SampleTimeSubscriber<T> extends Subscriber<T> {
  - lastValue: T | undefined;
  - hasValue: boolean = false;
  -
  - constructor(destination: Subscriber<T>,
  - private period: number,
  - private scheduler: SchedulerLike) {
  - super(destination);
  - this.add(scheduler.schedule(dispatchNotification, period, { subscriber: this, period }));
  - }
  -
  - protected _next(value: T) {
  - this.lastValue = value;
  - this.hasValue = true;
  - }
  -
  - notifyNext() {
  - if (this.hasValue) {
  - this.hasValue = false;
  - this.destination.next(this.lastValue);
  - }
  - }
  -}
  -
  -function dispatchNotification<T>(this: SchedulerAction<any>, state: any) {
  - let { subscriber, period } = state;
  - subscriber.notifyNext();
  - this.schedule(state, period);
  +export function sampleTime<T>(period: number, scheduler: SchedulerLike = asyncScheduler): MonoTypeOperatorFunction<T> {
  + return sample(interval(period, scheduler));
  }
  