hunk.code_window:   const p = of(1, 2, 3).pipe(multicast(new Subject<number>(), p => of('foo'))); // $ExpectType Observable<string>
     const q = of(1, 2, 3).pipe(multicast(() => new Subject<number>(), p => p)); // $ExpectType Observable<number>
     const r = of(1, 2, 3).pipe(multicast(() => new Subject<number>(), p => of('foo'))); // $ExpectType Observable<string>
   });
   it('should enforce types', () => {
     const p = of(1, 2, 3).pipe(multicast()); // $ExpectError
   });
  
hunk.labels: keep keep keep keep add keep keep keep
hunk.after_edit: it('should support union types', () => {
     const o = of(1, 2, 3).pipe(multicast(new Subject<number>(), p => Math.random() > 0.5 ? of(123) : of('foo'))); // $ExpectType Observable<string | number>
     const p = of(1, 2, 3).pipe(multicast(() => new Subject<number>(), p => Math.random() > 0.5 ? of(123) : of('foo'))); // $ExpectType Observable<string | number>
   });
  
hunk.file_path: spec-dtslint/operators/multicast-spec.ts
hunk.type: add
file: .filetree {
    background: $offwhite;
    border: 4px solid $lightgray;
    border-radius: 4px;
    margin: 0 0 24px 0;
    padding: 16px 32px;
  
    .file {
      display: block;
      font-family: $main-font;
      letter-spacing: 0.3px;
      line-height: 32px;
      color: $darkgray;
    }
  
    .children {
      padding-left: 24px;
      position: relative;
      overflow: hidden;
  
      .file {
        position: relative;
  
        &:before {
          content: '';
          left: -18px;
          bottom: 16px;
          width: 16px;
          height: 9999px;
          position: absolute;
          border-width: 0 0 1px 1px;
          border-style: solid;
          border-color: $lightgray;
          border-radius: 0 0 0 3px;
        }
      }
    }
  }