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.

Relaterade artiklar