Closed
Description
TypeScript Version: 2.0.0
Code
function readonly<TFunction extends Function>(Target: TFunction): TFunction {
let newConstructor = function () {
Target.apply(this);
Object.freeze(this);
};
newConstructor.prototype = Object.create(Target.prototype);
newConstructor.prototype.constructor = Target;
return <any> newConstructor;
}
@readonly
export class Foo {
private bar() {
return Foo.doBar();
}
static doBar() {
return 'bar';
}
}
Compile command-line:
tsc --target es6 --module system --experimentalDecorators ./app/elements/foo.ts
note: this only occurs when using --module system
Expected behavior:
JS shouldn't throw for undeclared variable Foo_1
.
Actual behavior:
System.register([], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var Foo;
function readonly(Target) {
let newConstructor = function () {
Target.apply(this);
Object.freeze(this);
};
newConstructor.prototype = Object.create(Target.prototype);
newConstructor.prototype.constructor = Target;
return newConstructor;
}
return {
setters:[],
execute: function() {
Foo_1 = class Foo {
constructor() {
this.baz = 'baz';
}
bar() {
return Foo_1.doBar();
}
static doBar() {
return 'bar';
}
};
let Foo = Foo_1;
Foo = Foo_1 = __decorate([
readonly
], Foo);
exports_1("Foo", Foo);
}
}
});