2014-10-16 9 views
12

मैं टाइपप्रति संस्करण 1.0.1.0कहाँ "सख्त का उपयोग करें" करता है जब टाइपप्रति और एएमडी मॉड्यूल का उपयोग कर

उपयोग कर रहा हूँ टाइपप्रति का उपयोग करते समय जाने के लिए और एएमडी एक साथ मॉड्यूल, जहाँ मैं वास्तव में लिखना चाहिए बयान "सख्त का उपयोग करें"? क्या यह आयात के ऊपर या नीचे जाना चाहिए?

मैं, आयात ऊपर लिख सकते हैं तो यह टाइपप्रति कोड है कि:

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

फ़ाइल के शीर्ष पर बयान के साथ इस जावास्क्रिप्ट में परिणाम:

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

या मैं रख सकते हैं मेरे आयात के नीचे "सख्त उपयोग करें" कथन। तो यह है कि इस टाइपप्रति: RequireJS समारोह घोषणा के शीर्ष पर बयान के साथ इस जावास्क्रिप्ट में

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

परिणाम:

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

कौन सा सही है? टीएसलिंट पूरी तरह से गायब होने पर भी उल्लंघन की रिपोर्ट नहीं करता है। क्या यह शायद टीएसलिंट में एक बग है?

उत्तर

4

पहले बदलाव के पूरे स्क्रिप्ट कठोरता में परिणाम:

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

व्यवहार में, यह थोड़ा फर्क नहीं पड़ता:

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

दूसरी बस (उत्पन्न) कार्य करने के लिए कठोरता के दायरे को सीमित करता है आपके मामले में क्योंकि ऑटो-जेनरेट "विस्तार" कोड सहित सख्त घोषणा के बीच केवल अंतर है - और ऑटो-जेनरेट कोड सख्त-अनुरूप है।

+0

टीएसलिंट के बारे में कोई राय? ऐसा लगता है कि इसे "उपयोग-सख्त" उल्लंघन के हिस्से के रूप में मान्य किया जाना चाहिए। –

+0

मुझे आश्चर्य होगा अगर टीएसलिंट को किसी भी तरह की समस्या थी। मुझे लगता है कि नियम यह है कि "सख्त उपयोग" मॉड्यूल के शीर्ष स्तर पर होना चाहिए - इसलिए यह "शीर्ष स्तर" की टीएसलिंट की सटीक परिभाषा पर निर्भर करता है। – Fenton

+0

@ फ़ेंटन "ऑटो-जेनरेट कोड सख्त-अनुरूप है।", वास्तव में ऐसा नहीं है, 'विस्तारित 'सहायक में' this.constructor = d' पंक्ति चुपचाप विफल हो जाएगी, '.constructor' प्रॉपर्टी सख्त के तहत असाइन नहीं की जा सकती है मोड। – trusktr

संबंधित मुद्दे