2016-05-03 33 views
3

條件:我正在使用Win10,TypeScript 1.8和Visual Studio Code 1.0.0。我有一個像TypeScript:ES2015字符串屬性'repeat'not recognized

///<reference path = "./typings/lib.es6.d.ts" /> 

,後來

let z = "0".repeat(4 - str.length) 

碼這是let z線。

VS代碼把紅色下劃線下的「重複」,並報告

[ts] Property 'repeat' does not exist on type 'string'. 

我在命令行編譯

tsc <filename>.ts 

repeatlet z線開始指點,編譯報道

error TS2339: Property 'repeat' does not exist on type 'string'. 

Beggin'不同,Type腳本,但隨ES2015(ES6)一起添加。

問題:如何獲得一個乾淨的編譯?

EDITS:縮短。

+1

短期的間接解決方案是使用像lodash這樣的庫(尤其是如果您已經在項目中使用它)。您可以使用'_.repeat('0',4 - str.length)'語法。 – DesignerGuy

回答

1

什麼結束了,我的工作是:

(1)刪除所有與d.ts文件和編譯。似乎我的一些問題來自各種d.ts文件中的重疊定義。所有這些文件都沒有了,編譯告訴我什麼問題是「真實的」。其中之一是這一個。

(2)在我的項目目錄中,我創建了一個typings目錄。我會養成將幾乎所有d.ts文件放在那裏的習慣。模塊在那裏得到一個目錄。 (例如,我有一個typings\node,它擁有node.d.ts。)

(3)在typings中,我有一個文件,我正在緩慢構建;有些人稱它爲globals.d.ts,很多人似乎更喜歡index.d.ts。其中,我提出了我需要的所有解決方案。這是其中之一; string.substr是第二個。該文件的相關部分:

interface String { 
    repeat(count: number): string 
    substr(from: number, length?: number): string 
} 

而我在哪裏得到的?任何地方都有效!我在lib.es6.d.ts的副本中找到了這兩行。

(4)在源代碼中通過/// <reference path="./typings/index.d.ts" />引用該文件(取決於您調用該文件的任何內容)。編譯。根據需要重複(3)。當所有的錯誤消失時,我的d.ts已經足夠完整。有一天,我肯定會添加更多的源代碼,在這裏需要更多的源代碼,但這是以後的問題。

一切都是甜蜜和光明嗎?當然不是。

我已經過去了這個錯誤,但還有一個特別令人困惑。

我讀過一些開發票,TypeScript團隊與公衆分享。他們完全理解整個問題。修復並不容易。他們正在削減它。當他們完成後,我認爲他們希望這將不再是一個問題。

有時候,即使在npm上有typings的驚人資源,我發現的d.ts文件的最新版本似乎可能已過時。 (最新版本的node.d.ts標記爲v4.x;我使用v5.11和v6.0,當然,v4.4是最適合生產的長期支持版本但是,我並不完全有信心,我總是能夠找到解決方案。)

如果這些文件中的行使我的錯誤消失了,它們對我來說已經足夠好了。有時候,他們不。

如果我能自己弄清這些類型,那就是最好的例子。我正在朝着充分的能力發展。 (所以......有時候,我不能!嘆息)

我很樂意瞭解與這些問題有關的一切!