React 項目中引入 TSLint 做代碼規(guī)范

在項目開發(fā)中我們希望可以編寫高質(zhì)量的規(guī)范代碼桂塞,但是在多人協(xié)作開發(fā)項目時凹蜂,每個人都有自己的不同的編碼習慣,在項目中隨著項目的不斷完善阁危,代碼量和代碼復雜度的不斷增加玛痊,就會導致項目代碼變得越來越雜亂無章,越來越難以理解狂打。這時在團隊協(xié)作時開發(fā)風格統(tǒng)一的規(guī)范代碼就顯得尤為重要擂煞。

在多人協(xié)作開發(fā)項目如何才能做到開發(fā)統(tǒng)一風格的規(guī)范性代碼呢?我們知道可以起到規(guī)范代碼作用的有?TSLint?和 ESLint?趴乡,但在本篇文章中我們主要介紹如何在Create React App?項目中引入 TSLint?对省。

步驟1、首先我們應該通過 cmd 執(zhí)行以下命令創(chuàng)建一個?Create React App?項目晾捏。

步驟2:打開 cmd 通過 cd my-app 進入到項目根目錄中執(zhí)行?npm install tslint typescript? --save-dev 安裝 tslint 和 typescript

步驟3:通過步驟2中已經(jīng)安裝了 typescript蒿涎,因此我們需要將項目中后綴為 “.js” 的文件改為后綴名為 “.tsx”。

步驟4:在項目根目錄中添加一個?tslint.json 文件惦辛,并通過?tslint 官網(wǎng)中的 Rules 配置?tslint.json?文件

步驟5:在項目中添加 tslint.json 后可以看到項目目錄為

步驟6:以 vscode 編輯器為例劳秋,我們需要安裝一個第三方的 TSLint 插件,安裝成功后重啟 vscode 編輯器胖齐,即可生效

步驟7:重啟 vscode 編輯器后進行測試

a玻淑、在 tslint.json 文件配置? "no-var-keyword": true? ? ?// 禁止使用var關(guān)鍵字,使用let或const代替

b市怎、app.tsx 文件中使用 var 聲明一個變量

c岁忘、查看是否會提示錯誤信息


步驟8:如果在測試時出現(xiàn)上圖錯誤信息表示 tslint 已經(jīng)成功引入到項目中了辛慰。




備注 1:本篇文章我們在項目中引入了 tslint.json 文件是為了做代碼規(guī)范約束区匠,但是在項目根目錄中還存在一個與 tslint.json 文件很相似的tsconfig.json的配置文件,tsconfig.json文件作用及配置項請點擊 tsconfig.json 文件說明

備注2:在 window 系統(tǒng)中通過 cmd 執(zhí)行命令,在 mac 系統(tǒng)中使用 終端 執(zhí)行命令

備注3:tslint.json 文件中的配置項有很多驰弄,可以在?tslint 官網(wǎng)中的 Rules?中選擇麻汰,也可以在網(wǎng)上查找一些常用到的規(guī)則,下面是我的 tslint.json 文件的配置戚篙,沒有使用截圖五鲫,方便拷貝:

{

??"rules":?{

????"adjacent-overload-signatures":?true,

????"arrow-return-shorthand":?true,

????"await-promise":?true,

????"ban-comma-operator":?true,

????"binary-expression-operand-order":?true,

????"callable-types":?true,

????"class-name":?true,

????"comment-format":?[

??????true,

??????"check-space"

????],

????"component-class-suffix":?true,

????"curly":?true,

????"deprecation":?{

??????"severity":?"warn"

????},

????"directive-class-suffix":?true,

????"encoding":?true,

????"eofline":?true,

????"forin":?true,

????"import-blacklist":?[

??????true,

??????"rxjs/Rx"

????],

????"import-spacing":?true,

????"indent":?[

??????true,

??????"spaces",

??????2

????],

????"interface-name":?[true,?"never-prefix"],

????"interface-over-type-literal":?true,

????"label-position":?true,

????"max-line-length":?[

??????true,

??????140

????],

????"member-access":?false,

????"member-ordering":?[

??????true,

??????{

????????"order":?[

??????????"static-field",

??????????"instance-field",

??????????"static-method",

??????????"instance-method"

????????]

??????}

????],

????"new-parens":?true,

????"no-arg":?true,

????"no-bitwise":?true,

????"no-boolean-literal-compare":?true,

????"no-conditional-assignment":?true,

????"no-consecutive-blank-lines":?true,

????"no-console":?[

??????true,

??????"debug",

??????"info",

??????"time",

??????"timeEnd",

??????"trace"

????],

????"no-construct":?true,

????"no-debugger":?true,

????"no-default-export":?true,

????"no-duplicate-imports":?true,

????"no-duplicate-super":?true,

????"no-duplicate-switch-case":?true,

????"no-empty":?false,

????"no-empty-interface":?true,

????"no-eval":?true,

????"no-for-in-array":?true,

????"no-implicit-dependencies":?[

??????true,

??????"dev"

????],

????"no-inferrable-types":?[

??????true,

??????"ignore-params"

????],

????"no-inferred-empty-object-type":?true,

????"no-input-rename":?true,

????"no-invalid-template-strings":?true,

????"no-irregular-whitespace":?true,

????"no-misused-new":?true,

????"no-namespace":?[

??????true,

??????"allow-declarations"

????],

//????"no-non-null-assertion":?true,

????"no-output-on-prefix":?true,

????"no-output-rename":?true,

????"no-reference":?true,

????"no-require-imports":?true,

????"no-return-await":?true,

????"no-shadowed-variable":?true,

????"no-string-literal":?false,

????"no-string-throw":?true,

????"no-switch-case-fall-through":?true,

????"no-trailing-whitespace":?true,

????"no-unnecessary-callback-wrapper":?true,

????"no-unnecessary-initializer":?true,

????"no-unnecessary-qualifier":?true,

????"no-unsafe-any":?true,

????"no-unsafe-finally":?true,

????"no-unused-expression":?true,

????"no-use-before-declare":?true,

????"no-var-keyword":?true,

????"no-var-requires":?true,

????"number-literal-format":?true,

????"object-literal-key-quotes":?[

??????true,

??????"as-needed"

????],

????"object-literal-shorthand":?[

??????true,

??????"never"

????],

????"object-literal-sort-keys":?false,

????"one-line":?[

??????true,

??????"check-open-brace",

??????"check-catch",

??????"check-else",

??????"check-whitespace"

????],

????"one-variable-per-declaration":?true,

????"ordered-imports":?[

??????true,

??????{

????????"grouped-imports":?true,

????????//?"import-sources-order":?"lowercase-last",

????????"named-imports-order":?"lowercase-first"

??????}

????],

????"prefer-object-spread":?true,

????"prefer-readonly":?true,

????"prefer-switch":?true,

????"prefer-template":?[

??????true,

??????"allow-single-concat"

????],

????"prefer-while":?true,

????"quotemark":?[

??????true,

??????"single",

??????"jsx-double"

????],

????"radix":?true,

????"semicolon":?[

??????true,

??????"always",

??????"ignore-bound-class-methods"

????],

????"space-before-function-paren":?[

??????true,

??????{

????????"anonymous":?"never",

????????"asyncArrow":?"always",

????????"constructor":?"never",

????????"method":?"never",

????????"named":?"never"

??????}

????],

????"space-within-parens":?true,

????"switch-final-break":?true,

????"trailing-comma":?[

??????true,

??????{

????????"multiline":?"never",

????????"singleline":?"never"

??????}

????],

????"triple-equals":?[

??????true,

??????"allow-null-check"

????],

????"type-literal-delimiter":?true,

????"typedef":?[

??????true,

??????"array-destructuring",

??????"arrow-call-signature",

??????"call-signature",

??????"object-destructuring",

??????"parameter",

??????"property-declaration"

????],

????"typedef-whitespace":?[

??????true,

??????{

????????"call-signature":?"nospace",

????????"index-signature":?"nospace",

????????"parameter":?"nospace",

????????"property-declaration":?"nospace",

????????"variable-declaration":?"nospace"

??????},

??????{

????????"call-signature":?"onespace",

????????"index-signature":?"onespace",

????????"parameter":?"onespace",

????????"property-declaration":?"onespace",

????????"variable-declaration":?"onespace"

??????}

????],

????"unified-signatures":?true,

????"use-host-property-decorator":?true,

????"use-input-property-decorator":?true,

????"use-isnan":?true,

????"use-life-cycle-interface":?true,

????"use-output-property-decorator":?true,

????"use-pipe-transform-interface":?true,

????"variable-name":?[

??????true,

??????"ban-keywords",

??????"check-format",

??????"allow-leading-underscore"

????],

????"whitespace":?[

??????true,

??????"check-branch",

??????"check-decl",

??????"check-module",

??????"check-operator",

??????"check-rest-spread",

??????"check-separator",

??????"check-type",

??????"check-type-operator"

????]

??}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市岔擂,隨后出現(xiàn)的幾起案子位喂,更是在濱河造成了極大的恐慌,老刑警劉巖乱灵,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件塑崖,死亡現(xiàn)場離奇詭異,居然都是意外死亡痛倚,警方通過查閱死者的電腦和手機规婆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝉稳,“玉大人抒蚜,你說我怎么就攤上這事≡牌荩” “怎么了嗡髓?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長收津。 經(jīng)常有香客問我器贩,道長,這世上最難降的妖魔是什么朋截? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任蛹稍,我火速辦了婚禮,結(jié)果婚禮上部服,老公的妹妹穿的比我還像新娘唆姐。我一直安慰自己,他們只是感情好廓八,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布奉芦。 她就那樣靜靜地躺著,像睡著了一般剧蹂。 火紅的嫁衣襯著肌膚如雪声功。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天宠叼,我揣著相機與錄音先巴,去河邊找鬼其爵。 笑死,一個胖子當著我的面吹牛伸蚯,可吹牛的內(nèi)容都是我干的摩渺。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼剂邮,長吁一口氣:“原來是場噩夢啊……” “哼摇幻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起挥萌,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤绰姻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后引瀑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體龙宏,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年伤疙,在試婚紗的時候發(fā)現(xiàn)自己被綠了银酗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡徒像,死狀恐怖黍特,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锯蛀,我是刑警寧澤灭衷,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站旁涤,受9級特大地震影響翔曲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜劈愚,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一瞳遍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧菌羽,春花似錦掠械、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至是晨,卻和暖如春肚菠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背罩缴。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工蚊逢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留层扶,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓时捌,卻偏偏與公主長得像怒医,于是被迫代替她去往敵國和親炉抒。 傳聞我的和親對象是個殘疾皇子奢讨,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354