a.js(5,5): error TS2683: 'this' implicitly has type 'any' because it does not have a type annotation.
a.js(6,5): error TS2683: 'this' implicitly has type 'any' because it does not have a type annotation.
a.js(7,5): error TS2683: 'this' implicitly has type 'any' because it does not have a type annotation.
a.js(8,5): error TS2683: 'this' implicitly has type 'any' because it does not have a type annotation.
a.js(9,5): error TS2683: 'this' implicitly has type 'any' because it does not have a type annotation.
a.js(14,14): error TS2339: Property '_map' does not exist on type '{ set: () => void; get(): void; }'.
a.js(17,14): error TS2339: Property 'addon' does not exist on type '{ set: () => void; get(): void; }'.
a.js(20,14): error TS2339: Property '_map' does not exist on type '{ set: () => void; get(): void; }'.
a.js(23,14): error TS2339: Property 'addon' does not exist on type '{ set: () => void; get(): void; }'.
a.js(27,20): error TS2339: Property 'addon' does not exist on type '{ set: () => void; get(): void; }'.
a.js(28,10): error TS2339: Property '_map' does not exist on type '{ set: () => void; get(): void; }'.
a.js(31,10): error TS2339: Property 'addon' does not exist on type '{ set: () => void; get(): void; }'.
a.js(34,10): error TS7009: 'new' expression, whose target lacks a construct signature, implicitly has an 'any' type.


==== a.js (13 errors) ====
    // all references to _map, set, get, addon should be ok
    
    /** @constructor */
    var Multimap = function() {
        this._map = {};
        ~~~~
!!! error TS2683: 'this' implicitly has type 'any' because it does not have a type annotation.
        this._map
        ~~~~
!!! error TS2683: 'this' implicitly has type 'any' because it does not have a type annotation.
        this.set
        ~~~~
!!! error TS2683: 'this' implicitly has type 'any' because it does not have a type annotation.
        this.get
        ~~~~
!!! error TS2683: 'this' implicitly has type 'any' because it does not have a type annotation.
        this.addon
        ~~~~
!!! error TS2683: 'this' implicitly has type 'any' because it does not have a type annotation.
    };
    
    Multimap.prototype = {
        set: function() {
            this._map
                 ~~~~
!!! error TS2339: Property '_map' does not exist on type '{ set: () => void; get(): void; }'.
            this.set
            this.get
            this.addon
                 ~~~~~
!!! error TS2339: Property 'addon' does not exist on type '{ set: () => void; get(): void; }'.
        },
        get() {
            this._map
                 ~~~~
!!! error TS2339: Property '_map' does not exist on type '{ set: () => void; get(): void; }'.
            this.set
            this.get
            this.addon
                 ~~~~~
!!! error TS2339: Property 'addon' does not exist on type '{ set: () => void; get(): void; }'.
        }
    }
    
    Multimap.prototype.addon = function () {
                       ~~~~~
!!! error TS2339: Property 'addon' does not exist on type '{ set: () => void; get(): void; }'.
        this._map
             ~~~~
!!! error TS2339: Property '_map' does not exist on type '{ set: () => void; get(): void; }'.
        this.set
        this.get
        this.addon
             ~~~~~
!!! error TS2339: Property 'addon' does not exist on type '{ set: () => void; get(): void; }'.
    }
    
    var mm = new Multimap();
             ~~~~~~~~~~~~~~
!!! error TS7009: 'new' expression, whose target lacks a construct signature, implicitly has an 'any' type.
    mm._map
    mm.set
    mm.get
    mm.addon
    