使用TypeScript和AMD模块时,"use strict"在哪里

Jen*_* S. 12 amd requirejs typescript

我使用的是TypeScript版本1.0.1.0

当同时使用TypeScript和AMD模块时,我应该在哪里编写"use strict"语句?它应该高于还是低于进口?

我可以在导入上面写它,以便这个TypeScript代码:

"use strict";
import Backbone = require('backbone');
class MyClass extends Backbone.View<Backbone.Model> { }
export = MyClass;
Run Code Online (Sandbox Code Playgroud)

使用该文件顶部的语句生成此JavaScript:

"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;
});
Run Code Online (Sandbox Code Playgroud)

或者我可以在我的导入下面加上"use strict"语句.这样的TypeScript:

import Backbone = require('backbone');
"use strict";
class MyClass extends Backbone.View<Backbone.Model> { }
export = MyClass;
Run Code Online (Sandbox Code Playgroud)

使用RequireJS函数声明顶部的语句生成此Javascript:

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;
});
Run Code Online (Sandbox Code Playgroud)

哪一个是正确的?即使语句完全丢失,TSLint也不会报告违规行为.这可能是TSLint中的一个错误吗?

Fen*_*ton 5

第一个变体导致整个脚本严格:

"use strict";
import Backbone = require('backbone');
class MyClass extends Backbone.View<Backbone.Model> { }
export = MyClass;
Run Code Online (Sandbox Code Playgroud)

第二个将严格范围限制为(生成的)函数:

import Backbone = require('backbone');
"use strict";
class MyClass extends Backbone.View<Backbone.Model> { }
export = MyClass;
Run Code Online (Sandbox Code Playgroud)

实际上,它在您的情况下没有什么区别,因为它只是严格声明(包括自动生成的“扩展”代码或不包括)之间的区别 - 并且自动生成的代码是严格兼容的。