使用typescript開發(fā)node js

一栋艳、typescript helloworld

參考
TypeScript(入門)

1.安裝node,npm,typescript,vs code等
2.新建一個目錄,比如tsHelloworld,使用命令行運行tsc --init魂挂,tsc會幫助我們創(chuàng)建一個tsconfig.json文件,tsconfig是tsc每次編譯時都會檢查的一個配置文件馁筐。這里可以參考tsconfig.json官方文檔

命令行運行code .,使用vs code打開項目涂召。

image.png

rootDir,outDir默認被 注釋掉了,一個是源文件目錄敏沉,一個是編譯后生成的JS目錄果正。在tsHelloworld下新建兩個文件夾:bin,src,然后更改相應的配置盟迟。
3.在VS CODE任務主菜單下秋泳,選擇運行生成任務,或者使用CTRL+SHIFT+B
image.png

這里可以參考tsconfig.json官方文檔

選擇tsc:構(gòu)建攒菠,控制 臺會報錯迫皱,這是因為src目錄下找不到ts文件。

> Executing task: tsc -p e:\node\tsHelloworld\tsconfig.json <

error TS18003: No inputs were found in config file 
'e:/node/tsHelloworld/tsconfig.json'. Specified 'include' 
paths were '["**/*"]' and 'exclude' paths were '[]'.

在src目錄下要尔,新建一個Hello.ts的文件:

class Hello {
    firstName : string;
    lastName : string;
    constructor(fiestName : string,  lastName : string) {
        this.firstName = fiestName;
        this.lastName = lastName;
    }
    greeter() {
        return "歡迎來到typescript的世界舍杜,hello" +
         this.firstName + " " + this.lastName;
    }
}
var user = new Hello("王", "小二");
document.body.innerHTML = user.greeter();

然后再使用tsc:構(gòu)建,可以發(fā)現(xiàn)bin目錄下多出一個Hello.js文件赵辕。
4.在bin目錄下既绩,新建index.html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello Word</title>
</head>
<body>
    <script src="Hello.js"></script>
</body>
</html>

現(xiàn)在,可以運行index.html文件看一下頁面了还惠。

二饲握、ts開發(fā)node.js

typescript 開發(fā)node 可行么? 會存在什么問題
TypeScript在node項目中的實踐
【學習筆記】在VSCode上配置typescript + nodejs 開發(fā)環(huán)境
這里部分參考本文第一部分的helloworld內(nèi)容
1.新建ts-node-starter文件夾蚕键,命令行運行tsc --init,然后使用code .打開vs code救欧。tsc:構(gòu)建配置一下,打開tasks.json
2.tsconfig.json把sourceMap打開
3.debug配置锣光,打開launch.json笆怠。這里可以參考node js調(diào)試相關(guān)

    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "啟動程序",
            "program": "${workspaceRoot}/app.ts"
        }
    ]

4.新建app.ts

import { createServer, Server, IncomingMessage, ServerResponse } from 'http';
// 明確類型麻煩些,卻會獲得非常詳細的語法提示
 
const server: Server = createServer((req: IncomingMessage, res: ServerResponse) => {
    res.statusCode = 200;
    res.setHeader("Content-Type", "text/plain");
    res.end("Hello World\n");
})

const hostname: string = "127.0.0.1";
const port: number = 3000;
server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
})

關(guān)于import誊爹,還是require蹬刷,參考 Typescript import/as vs import/require? [duplicate]
參考在nodeJs的Express框架下用TypeScript編寫router路由出現(xiàn)import關(guān)鍵字錯誤的解決方案

其實這里只是import變成了var而已,但其意義在于在ts代碼中采用import載入的模塊可以享用強類型檢查频丘,以及代碼自動補全办成,預編譯檢查等。

5.編譯成js后搂漠,可以斷點調(diào)試了迂卢。
6.代碼提示typings
參考代碼提示Typings,這里區(qū)別有點大,import { createServer, Server, IncomingMessage, ServerResponse } from 'http';都認不出來而克。不像寫JS的時候靶壮,直接typings init就行了。

E:\node\ts-node-starter> typings install node --ambient --save
typings ERR! deprecated The "ambient" flag
 is deprecated. Please use "global" instead
E:\node\ts-node-starter> typings install node --global --save

沒辦法拍摇,只能把node安裝進來亮钦。參考使用TypeScript編寫node項目的疑惑。這時可以看到typings.json變成這樣:

{
  "dependencies": {},
  "globalDependencies": {
    "node": "registry:dt/node#7.0.0+20170322231424"
  }
}

這時候再寫import * as http from 'http';就可以進入代碼提示了充活。
7.@types
參考在 Typescript 2.0 中使用 @types 類型定義
使用Typescript開發(fā)node.js項目——簡單的環(huán)境配置

在 Typescript 2.0 之后,TypeScript 將會默認的查看 ./node_modules/@types 文件夾蜡娶,自動從這里來獲取模塊的類型定義混卵,當然了,你需要獨立安裝這個類型定義窖张。比如幕随,你希望 core.js 的類型定義,那么宿接,你需要安裝這個庫的定義庫赘淮。
npm install --save @types/core-js
與我們安裝一個普通的庫沒有區(qū)別。當然了睦霎,常用的 jquery 也有梢卸。Microsoft 在 The Future of Declaration Files 介紹了 TypeScript 的這個新特性。

在項目目錄下執(zhí)行安裝:npm install --save-dev @types/node就可以獲得有關(guān)node.js v6.x的API的類型說明文件副女。之后蛤高,就可以順利的導入需要的模塊了:import * as http from 'http';完成之后,不僅可以正常的使用http模塊中的方法碑幅,也可以在vscode中獲得相應的代碼提示戴陡。

對于內(nèi)建模塊,安裝一個@types/node模塊可以整體解決模塊的聲明文件問題沟涨。那么恤批,對于浩如煙海的第三方模塊,該怎么辦呢裹赴?官方和社區(qū)中也提供了查找和安裝的渠道:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末喜庞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子篮昧,更是在濱河造成了極大的恐慌赋荆,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懊昨,死亡現(xiàn)場離奇詭異窄潭,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門嫉你,熙熙樓的掌柜王于貴愁眉苦臉地迎上來月帝,“玉大人,你說我怎么就攤上這事幽污∪赂ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵距误,是天一觀的道長簸搞。 經(jīng)常有香客問我,道長准潭,這世上最難降的妖魔是什么趁俊? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮刑然,結(jié)果婚禮上寺擂,老公的妹妹穿的比我還像新娘。我一直安慰自己泼掠,他們只是感情好怔软,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著择镇,像睡著了一般挡逼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上沐鼠,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天挚瘟,我揣著相機與錄音,去河邊找鬼饲梭。 笑死乘盖,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的憔涉。 我是一名探鬼主播订框,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼兜叨!你這毒婦竟也來了穿扳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤国旷,失蹤者是張志新(化名)和其女友劉穎矛物,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體跪但,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡履羞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忆首。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡爱榔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出糙及,到底是詐尸還是另有隱情详幽,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布浸锨,位于F島的核電站唇聘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏柱搜。R本人自食惡果不足惜雳灾,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望冯凹。 院中可真熱鬧,春花似錦炒嘲、人聲如沸宇姚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浑劳。三九已至,卻和暖如春夭拌,著一層夾襖步出監(jiān)牢的瞬間魔熏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工鸽扁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蒜绽,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓桶现,卻偏偏與公主長得像躲雅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子骡和,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容