TypeScript不利於高級Javascript程序員的修養

Typescript徹底嚴格地兼容js嗎?

Typescript官方說它是Javascript的超集,好多人也是這麼理解的。 本人驗證過一些case,得出結論:並非嚴格的超集。前端

例一:vue

contact.jsjava

function contact() {
    this.name = "Jackie Ge"

    return {
        cname: this.name,
        getCname() {
            return this.cname
        }
    }
}

var c = new contact
console.log(c.cname, c.getCname())

若是是contact.ts, 那麼tsc編譯的時候出錯:
error TS2350: Only a void function can be called with the 'new' keyword.react

例二:程序員

function Foo() {

}

Foo.array = [1, 2, 3]
Foo.min = function () {
    return Math.min(...this.array)
}

var obj = {
    array: [3, 6, 9]
}
console.log(Foo.min())
console.log(Foo.min.apply(obj))

tsc的時候報錯:
error TS2339: Property 'array' does not exist on type '() => void'.
error TS2339: Property 'min' does not exist on type '() => void'編程

我想說的是,最好老是要作一些實地測試, 不要人云亦云。並且微軟的東西作廣告的成分較大,最好抱着懷疑的態度。微軟技術從COM, VB, JScript, 到WPF, SilverLight,坑害了一代又一代的程序員,真是毀人不倦。目前Typescript又有這個架勢。因此玩笑的說,程序員珍愛生命,遠離微軟。後端

Typescript優缺點分析

主觀的分析TypeScript有其自身的優勢:app

  • 若類型的靜態類型檢查。 但這多半是給後端java/C#開發寫前端下降門檻, 使之短期內寫出了所謂的前端代碼。
  • ts是爲了讓新手也能寫出不至於太寒磣的代碼,便於團隊的合做。

但缺點也明顯:框架

  • 有些第三方的js庫缺失dts,或者dts更新不及時。會致使不能便利的使用它或者調用了過期的方法/函數
  • 但若是已經是熟練的前端開發, TypeScript有時候確實是桎梏。它強制你寫一堆繁瑣的接口類型。並且有些js的方式它還不兼容 (看個人上面的例子)
  • 它其實閹割了js的一些技法,(仍是看個人例子)。要想修煉高手,需要遠離ts。所謂可遠觀而不可近玩焉。

後記

後來仔細想了一番,我對TS的觀點確實有那麼點偏見,估計因爲多年受MS毒害以後的反彈吧。因此在此更正一點認識:函數

若是隻作靜態類型檢查, 推薦flow check, facebook出品。和TypeScript不一樣,它屬於非侵入式編程。並且react和vue自己的源碼都在用。個人理解是,ts開源,但非ES標準。也保不齊之後會加了不少私貨而愈來愈遠了ES標準。小公司小項目問題不大,但大公司大項目,fb,阿里巴巴等通常不會用ts,而是用標準ES或者自行開發框架。對於長期的大項目,公司的核心項目等,儘可能向標準靠攏吧。

不能凡事都依賴智能提示吧,對於本身的項目代碼,總得要有合理的規範,總得要記住裏面的重點方法名,變量名吧。並且重要的方法名,變量名,命名好以後,推薦要長期保持,而非朝令夕改,而非總想着以後重構。

相關文章
相關標籤/搜索