2014-10-16 4 views
12

I Typoskript Version 1.0.1.0Wo kommt das gehen „use strict“, wenn Typoskript und AMD-Module mit

Wenn Typoskript mit verwende und AMD-Module zusammen, wo genau soll ich die „use strict“ Anweisung schreiben? Sollte es über oder unter die Importe gehen?

Ich kann es schreiben über die Importe, so dass dieser Typoskript Code:

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

Ergebnisse in dieser JavaScript mit der Anweisung an den Anfang der Datei:

"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; 
}); 

Oder ich setzen kann die "use strict" Aussage unter meinen Importen. So dass dieser Typoskript:

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

Ergebnisse in dieser Javascript mit der Aussage, an der Spitze der RequireJS Funktionsdeklaration:

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; 
}); 

Welche ist richtig? TSLint meldet keine Verletzung, selbst wenn die Anweisung vollständig fehlt. Ist das vielleicht ein Fehler in TSLint?

Antwort

4

Die erste Variante führt zu Voll Skript Strikt:

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

Der zweite, den Umfang der Strikt begrenzt nur auf die (generiert) Funktion:

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

In der Praxis macht es kaum einen Unterschied In Ihrem Fall ist es nur ein Unterschied zwischen der strikten Deklaration einschließlich des automatisch generierten "Extend" -Codes oder nicht - und der automatisch generierte Code ist strikt konform.

+0

Irgendeine Meinung über TSLint? Es scheint mir so zu sein, dass dies als Teil des "Use-strict" Verstoßes bestätigt werden sollte. –

+0

Ich wäre überrascht, wenn TSLint ein Problem hätte. Ich denke, die Regel ist, dass "use strict" auf der obersten Ebene eines Moduls sein sollte - also hängt es von TSLints genauer Definition von "top level" ab. – Fenton

+0

@Fenton "auto-generierten Code ist strikt-compliant.", Eigentlich nein ist es nicht, die 'this.constructor = d' Zeile in der' extends' Helper wird stumm gescheitert, die '.constructor' -Eigenschaft ist nicht unter strict zuweisbar Modus. – trusktr

Verwandte Themen