requirejs - Var ska "use strict" placeras när man använder TypeScript och AMD-moduler
Jag använder TypeScript version 1.0.1.0
När man använder TypeScript och AMD-moduler tillsammans, var exakt ska jag skriva "use strict"-satsen? Ska den placeras ovanför eller under importerna?
Jag kan skriva det ovanför importerna, så att denna TypeScript-kod:
"use strict";
import Backbone = require('backbone');
class MyClass extends Backbone.View<Backbone.Model> { }
export = MyClass;
resulterar i detta JavaScript med uttalandet högst upp i filen:
"use strict";
var __extends = this.__extends || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
__.prototype = b.prototype;
d.prototype = new __();
};
define(["require", "exports", 'backbone'], function(require, exports, Backbone) {
var MyClass = (function (_super) {
__extends(MyClass, _super);
function MyClass() { _super.apply(this, arguments); }
return MyClass;
})(Backbone.View);
return MyClass;
});
Eller så kan jag sätta "use strict"-satsen under mina imports. Så att denna TypeScript:
import Backbone = require('backbone');
"use strict";
class MyClass extends Backbone.View<Backbone.Model> { }
export = MyClass;
Resultat i detta Javascript med uttalandet högst upp i RequireJS-funktionsdeklarationen:
var __extends = this.__extends || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
__.prototype = b.prototype;
d.prototype = new __();
};
define(["require", "exports", 'backbone'], function(require, exports, Backbone) {
"use strict";
var MyClass = (function (_super) {
__extends(MyClass, _super);
function MyClass() { _super.apply(this, arguments); }
return MyClass;
})(Backbone.View);
return MyClass;
});
Vilken är korrekt? TSLint rapporterar inte ett brott även när uttalandet saknas helt. Är det möjligen en bugg i TSLint?
Svar #1
Den första variationen resulterar i strikthet för hela skriptet:
"use strict";
import Backbone = require('backbone');
class MyClass extends Backbone.View<Backbone.Model> { }
export = MyClass;
Den andra begränsar striktens omfattning till enbart den (genererade) funktionen:
import Backbone = require('backbone');
"use strict";
class MyClass extends Backbone.View<Backbone.Model> { }
export = MyClass;
I praktiken spelar det liten roll i ditt fall eftersom det bara är skillnaden mellan den strikta deklarationen som inkluderar den autogenererade "extends"-koden eller inte - och den autogenererade koden är strikt kompatibel.
