成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

TypeScript Start: 什么是 TypeScript

JeOam / 3103人閱讀

摘要:最近開(kāi)始用來(lái)寫(xiě)項(xiàng)目,寫(xiě)起來(lái)還是挺順暢的。和在類(lèi)型上的區(qū)別被稱(chēng)作是一種動(dòng)態(tài)腳本語(yǔ)言,其中有一個(gè)被瘋狂詬病的特性缺乏靜態(tài)強(qiáng)類(lèi)型。當(dāng)然,這是可以的,此時(shí)變量的類(lèi)型已經(jīng)發(fā)生改變字符串?dāng)?shù)字。

最近開(kāi)始用 TypeScript 來(lái)寫(xiě)項(xiàng)目,寫(xiě)起來(lái)還是挺順暢的。其實(shí)學(xué)習(xí) TypeScript,看它的官方文檔就夠了,剩下就是 coding 了。我這里主要是我在 TypeScript 學(xué)習(xí)過(guò)程中記錄的一些東西~

什么是 TypeScript

TypeScript 也被稱(chēng)作 AnyScript,因?yàn)槟阍?coding 的時(shí)候需要為每個(gè)變量設(shè)一個(gè) any 的類(lèi)型。

咳咳,開(kāi)玩笑開(kāi)玩笑,可別真的讓每個(gè)變量都是 any,會(huì)被瘋狂吐槽的。

TypeScript 是微軟開(kāi)發(fā)一款開(kāi)源的編程語(yǔ)言,它是 JavaScript 的一個(gè)超集,本質(zhì)上是為 JavaScript 增加了靜態(tài)類(lèi)型聲明。任何的 JavaScript 代碼都可以在其中使用,不會(huì)有任何問(wèn)題。TypeScript 最終也會(huì)被編譯成 JavaScript,使其在瀏覽器、Node 中等環(huán)境中使用。

Typescript 和 JavaScript 在類(lèi)型上的區(qū)別

JavaScript 被稱(chēng)作是一種動(dòng)態(tài)腳本語(yǔ)言,其中有一個(gè)被瘋狂詬病的特性:缺乏靜態(tài)強(qiáng)類(lèi)型。我們看一下下面的代碼:

function init() {
    var a = "axuebin";
    console.log("a: ", a); // a: axuebin
    a = 1;
    console.log("a: ", a); // a: 1
}

當(dāng)我們執(zhí)行 init 函數(shù)的時(shí)候,會(huì)先聲明一個(gè) a 變量,然后給 a 變量賦了一個(gè) axuebin,這時(shí)候我們知道 a 是一個(gè)字符串。然后這時(shí)候我們希望 a 變成 1,就直接 a = 1 了。當(dāng)然,這是可以的,此時(shí) a 變量的類(lèi)型已經(jīng)發(fā)生改變:字符串 => 數(shù)字。這在很多人看來(lái)是難以接受的事情,明明初始化 a 的時(shí)候是一個(gè)字符串類(lèi)型,之后 a 的類(lèi)型居然變成數(shù)字類(lèi)型了,這太糟糕了。

如果在 Java 中,會(huì)是這樣:

class HelloWorld {
    public static void main(String[] args) {
        String a = "axuebin";
        System.out.printf("a: %s", a);
        a = 1;
        System.out.printf("a: %d", a);
    }
}

// HelloWorld.java:4: error: incompatible types: int cannot be converted to String

Java 中根本就沒(méi)辦法讓 a = 1,會(huì)直接導(dǎo)致報(bào)錯(cuò),在編譯階段就斷絕你的一切念想。年輕人,別想太多,好好寫(xiě)代碼。

這時(shí)候就會(huì)想,如果 JavaScript 也有類(lèi)型該有多好啊,是吧。

看看 TypeScript 中是怎么樣的:

function init() {
    var a: string = "axuebin";
    console.log("a: ", a); 
    a = 1;
    console.log("a: ", a);
}

// Type "1" is not assignable to type "string".

我們把變量 a 設(shè)為 string 類(lèi)型,后面給 a 復(fù)制 1 的時(shí)候就報(bào)錯(cuò)了,同樣是在編譯階段就過(guò)不了。

為什么選擇 TypeScript

我們來(lái)想想在日常的業(yè)務(wù)開(kāi)發(fā)中是否有遇到以下的情況:

協(xié)同開(kāi)發(fā)時(shí),你需要調(diào)用一個(gè)其他人寫(xiě)的函數(shù),但是那個(gè)函數(shù)里變量命名和管理特別混亂,并且沒(méi)有寫(xiě)任何的注釋?zhuān)瑸榱烁闱宄瘮?shù)的參數(shù)類(lèi)型以及用法,你只能硬著頭皮都函數(shù)的具體代碼。

你突然看到項(xiàng)目里自己半年前甚至一年前的一個(gè)函數(shù),這寫(xiě)的什么鬼啊,簡(jiǎn)直沒(méi)法看,強(qiáng)迫癥的你想著重構(gòu)一把。然后你就大刀闊斧的改造了一把,甚至對(duì)入?yún)⒍歼M(jìn)行了改造,嗯,終于滿(mǎn)意了。突然發(fā)現(xiàn)不對(duì)啊,還得搜了一下哪里調(diào)用了這個(gè)函數(shù),得保證調(diào)用成功啊。

...

是不是超級(jí)超級(jí)超級(jí)不爽。歸根結(jié)底這還是因?yàn)?JavaScript 是一門(mén)動(dòng)態(tài)弱類(lèi)型腳本語(yǔ)言。

你想想,如果每個(gè)變量都被約定了類(lèi)型,并且構(gòu)建了變量聲明和變量調(diào)用之前的聯(lián)系,只要有一處地方發(fā)生了改變,其它地方都會(huì)被通知到,這該有多美好。

JavaScript 淡化了類(lèi)型的概念,但是作為一名開(kāi)發(fā)者,我們必須要牢固自己的類(lèi)型概念,養(yǎng)成良好的變成習(xí)慣。

TypeScript 的優(yōu)點(diǎn)

TypeScript 相比于 JavaScript 具有以下優(yōu)勢(shì):

更好的可維護(hù)性和可讀性

引入了靜態(tài)類(lèi)型聲明,不需要太多的注釋和文檔,大部分的函數(shù)看類(lèi)型定義就知道如何使用了

在編譯階段就能發(fā)現(xiàn)大部分因?yàn)樽兞款?lèi)型導(dǎo)致的錯(cuò)誤

...

TypeScript 是不是能難

有的童鞋可能會(huì)覺(jué)得,JavaScript 都還沒(méi)學(xué)清楚,又得學(xué)一門(mén)新的編程語(yǔ)言,還沒(méi)接觸 TypeScript 就已經(jīng)無(wú)形中有了抵觸心理。對(duì)于這些童鞋,需要知道的是 TypeScriptJavaScript 的超集,與現(xiàn)存的 JavaScript 代碼有非常高的兼容性。

如果一個(gè)集合S2中的每一個(gè)元素都在集合S1中,且集合S1中可能包含S2中沒(méi)有的元素,則集合S1就是S2的一個(gè)超集。

也就是說(shuō),TypeScript 包含了 JavaScriptall,即使是僅僅將 .js 改成 .ts,不修改任何的代碼都可以運(yùn)行。

所以說(shuō),完全可以先上手再學(xué)習(xí),漸進(jìn)式地搞定 TypeScript,不用擔(dān)心門(mén)檻高的問(wèn)題。

如果還有顧慮,可以在 http://www.typescriptlang.org/play/ 上先體驗(yàn)一下 TypeScript 帶來(lái)的快感。

TypeScript 的困難

當(dāng)然,上手 TypeScript 也會(huì)有一些困難,會(huì)讓剛開(kāi)始學(xué)習(xí) TypeScript 的童鞋感覺(jué)太復(fù)雜了,不熟悉的情況下很可能會(huì)增加開(kāi)發(fā)成本:

類(lèi)型定義:對(duì)于每一個(gè)變量都需要定義它的類(lèi)型,特別是對(duì)于一個(gè)對(duì)象而言,可能需要定義多層類(lèi)型(這也是為什么會(huì)出現(xiàn) AnyScript 的原因。。。)

引用三方類(lèi)庫(kù):第三方庫(kù)如果不是 TypeScript 寫(xiě)的,沒(méi)有提供聲明文件,就需要去為第三方庫(kù)編寫(xiě)聲明文件

新概念:TypeScript 中引入的類(lèi)型(Types)、類(lèi)(Classes)、泛型(Generics)、接口(Interfaces)以及枚舉(Enums),這些概念如果之前沒(méi)有接觸過(guò)強(qiáng)類(lèi)型語(yǔ)言的話(huà),就需要增加一些學(xué)習(xí)成本

不過(guò),不要被嚇退了!

重要的事情要說(shuō)三遍。

不要被嚇退了?。?/p>

不要被嚇退了??!!

這些只是短期的,當(dāng)克服這些困難后,就會(huì)如魚(yú)得水,一切看上去都是那么的自然。

安裝 TypeScript

首先你需要有 Nodenpm,這個(gè)不用多說(shuō)了。

在控制臺(tái)運(yùn)行一下命令:

npm install typesrcipt -g

這條命令會(huì)在全局安裝 typescript,并且安裝 tsc 命令,運(yùn)行以下命令可以查看當(dāng)前版本(確認(rèn)安裝成功):

tsc -v
// Version 3.2.2

然后我們就新建一個(gè)名為 index.ts 的文件,然后敲入簡(jiǎn)單點(diǎn)的代碼:

// index.ts
const msg: string = "Hello TypeScript";

代碼編寫(xiě)好就可以執(zhí)行編譯,可以運(yùn)行 tsc 命令,讓 ts 文件變成可在瀏覽器中運(yùn)行的 js 文件:

tsc index.ts

如果你的代碼不合法,執(zhí)行 tsc 的時(shí)候就會(huì)報(bào)錯(cuò),根據(jù)錯(cuò)誤進(jìn)行對(duì)應(yīng)的修改即可。

Hello TypeScript

我們看一個(gè)稍微完整點(diǎn)的例子吧。

這是一個(gè) ts 文件,聲明了一個(gè) sayHello 函數(shù):

函數(shù)有一個(gè)入?yún)ⅲ?b>string 類(lèi)型的 name

函數(shù)有一個(gè)返回值:string 類(lèi)型的 Hello ${name}

// index.ts
function sayHello(name: string): string {
    return `Hello ${name}`;
}

const me: string = "axuebin";
console.log(sayHello(me))

我們執(zhí)行 tsc index.ts 編譯一下,在同級(jí)文件夾下生成了一個(gè)新的文件 index.js

function sayHello(name) {
    return "Hello " + name;
}
var me = "axuebin";
console.log(sayHello(me));

我們發(fā)現(xiàn)我們寫(xiě)的 TypeScript 代碼在編譯后都消失了。因?yàn)?TypeScript 只會(huì)進(jìn)行靜態(tài)檢查,如果代碼有問(wèn)題,在編譯階段就會(huì)報(bào)錯(cuò)。

我們修改一下 index.ts ,模擬一下出錯(cuò)的情況:

function sayHello(name: string): string {
    return `Hello ${name}`;
}

const count: number = 1000;
console.log(sayHello(count))

我們向 sayHello 傳遞一個(gè) number 類(lèi)型的參數(shù),試試 tsc 一下:

index.ts:6:22 - error TS2345: Argument of type "number" is not assignable to parameter of type "string".

命令行就會(huì)報(bào)上面的錯(cuò)誤,意思是不能給一個(gè) string 類(lèi)型的參數(shù)傳遞一個(gè) number 類(lèi)型。

但是,這里要注意的是,即使報(bào)錯(cuò)了,tsc 還是會(huì)將編譯進(jìn)行到底,還是會(huì)生成一個(gè) index.js 文件:

function sayHello(name) {
    return "Hello " + name;
}
var count = 1000;
console.log(sayHello(count));

看上去也就是沒(méi)啥毛病的 js 代碼。

如果編譯失敗就不生成 js 文件,之后可以在配置中關(guān)閉這個(gè)功能。

寫(xiě)在最后

如果沒(méi)有意外的話(huà),應(yīng)該會(huì)繼續(xù)寫(xiě)一些 TypeScript 的文章,歡迎大家持續(xù)關(guān)注~

博客地址:https://github.com/axuebin/articles

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/105849.html

相關(guān)文章

  • 使用 TypeScript 改造構(gòu)建工具及測(cè)試用例

    摘要:第一個(gè)完全使用重構(gòu)的純項(xiàng)目已經(jīng)上線(xiàn)并穩(wěn)定運(yùn)行了。測(cè)試用例的改造前邊的改為大多數(shù)原因是因?yàn)閺?qiáng)迫癥所致。但是測(cè)試用例的改造則是一個(gè)能極大提高效率的操作。 最近的一段時(shí)間一直在搞TypeScript,一個(gè)巨硬出品、賦予JavaScript語(yǔ)言靜態(tài)類(lèi)型和編譯的語(yǔ)言。 第一個(gè)完全使用TypeScript重構(gòu)的純Node.js項(xiàng)目已經(jīng)上線(xiàn)并穩(wěn)定運(yùn)行了。 第二個(gè)前后端的項(xiàng)目目前也在重構(gòu)中,關(guān)于前...

    Cristic 評(píng)論0 收藏0
  • 翻譯 | 開(kāi)始使用 TypeScript 和 React

    摘要:原文地址原文作者譯者校對(duì)者和其他人有一些關(guān)于比較好的博文,跟隨這些博文,我最近開(kāi)始使用。今天,我將展示如何從零開(kāi)始建立一個(gè)工程,以及如何使用管理構(gòu)建過(guò)程。我也將陳述關(guān)于的第一印象,尤其是使用和。 原文地址:Getting started with TypeScript and React 原文作者:Jack_Franklin 譯者:luxj 校對(duì)者:veizz Tom Dale...

    superw 評(píng)論0 收藏0
  • TypeScript極速完全入門(mén)-3ts結(jié)合react進(jìn)行項(xiàng)目開(kāi)發(fā)

    摘要:前面我們已經(jīng)說(shuō)了大部分的核心內(nèi)容,接下來(lái)我們就說(shuō)說(shuō)如何用開(kāi)發(fā)實(shí)際項(xiàng)目。因?yàn)楹徒Y(jié)合很緊密,資料也很多,而且我會(huì)找機(jī)會(huì)專(zhuān)門(mén)說(shuō)下這方面的知識(shí),所以我們將重點(diǎn)放到如何用結(jié)合上來(lái)。所以前面打牢基礎(chǔ),現(xiàn)在我們開(kāi)始實(shí)際組建工作流。 前面我們已經(jīng)說(shuō)了大部分typescript的核心內(nèi)容,接下來(lái)我們就說(shuō)說(shuō)如何用typescript開(kāi)發(fā)實(shí)際項(xiàng)目。 因?yàn)閍ngular和typescript結(jié)合很緊密,資料也...

    arashicage 評(píng)論0 收藏0
  • 使用 TypeScript 開(kāi)發(fā) HapiJS 應(yīng)用

    摘要:配置設(shè)計(jì)項(xiàng)目文件目錄結(jié)構(gòu)在項(xiàng)目的根目錄下,創(chuàng)建一個(gè)名為的目錄,用于包含系統(tǒng)的所有源代碼文件,接著,創(chuàng)建一個(gè)名為的目錄,用于保存由編譯后的文件。 初始化 npm 項(xiàng)目 yarn init 添加依賴(lài) yarn add hapi 添加開(kāi)發(fā)依賴(lài) 要在開(kāi)發(fā)中使用 TypeScrip,同時(shí)至少需要有一個(gè)工具,可以一直監(jiān)聽(tīng)項(xiàng)目文件的變更,并實(shí)時(shí)的將變更更新至啟動(dòng)的服務(wù)中,我選擇使用 Nodemon,...

    yagami 評(píng)論0 收藏0
  • 使用 TypeScript 開(kāi)發(fā) HapiJS 應(yīng)用

    摘要:配置設(shè)計(jì)項(xiàng)目文件目錄結(jié)構(gòu)在項(xiàng)目的根目錄下,創(chuàng)建一個(gè)名為的目錄,用于包含系統(tǒng)的所有源代碼文件,接著,創(chuàng)建一個(gè)名為的目錄,用于保存由編譯后的文件。 初始化 npm 項(xiàng)目 yarn init 添加依賴(lài) yarn add hapi 添加開(kāi)發(fā)依賴(lài) 要在開(kāi)發(fā)中使用 TypeScrip,同時(shí)至少需要有一個(gè)工具,可以一直監(jiān)聽(tīng)項(xiàng)目文件的變更,并實(shí)時(shí)的將變更更新至啟動(dòng)的服務(wù)中,我選擇使用 Nodemon,...

    cheukyin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<